我正在尝试创建一个'T'类型的动态数组,其中包含一个'X'类型的数组。为了从X访问T的属性,我尝试在结构X中创建一个指向T的指针。这是我的代码:

struct WireSeg; // Forward declaration

struct Track { // Type X in above description
    int trackNum;
    bool used;
    WireSeg* parentWireSeg;
};

struct WireSeg { // Type T in above description
    int xCoord;
    int yCoord;
    char flag;
    char orientation;
    Track* track;
};

typedef WireSeg* WireSegPtr

int main (void) {
  WireSegPtr wireSeg;
  wireSeg = new WireSeg[5];
  for (int i =0; i<5; i++) {
    wireSeg[i].track = new Track[3];
    for (int j =0; j<3; j++) {
      wireSeg[i].track[j].parentWireSeg = wireSeg[i];
    }
  }
}

我收到编译错误:



我不明白parentWireSeg已被声明为WireSeg类型的指针,并且wireSeg[i]也是wireSeg数组中的一个元素,并且是一个指针(不是吗?)。

我尝试使用它,并声明parentWireSegWireSeg类型:
struct Track {
    int trackNum;
    bool used;
    bool flag;
    WireSeg parentWireSeg;
};

这给了我错误:



这对我来说也没有意义,因为struct Track确实将parentWireSeg作为元素!有人可以解释一下吗?我是否不允许在Track中指向WireSeg的指针?

我可能可以使用继承的类(可以吗?),但是如果有人告诉我我的方法有什么问题,我希望这样做。

最佳答案

尝试将进行分配的行更改为:

wireSeg[i].track[j].parentWireSeg = &wireSeg[i];

您会看到,wireSeg的类型为WireSeg*,因此当您通过执行*wireSegwireSeg[0]wireSeg[i]取消引用它时,您会得到WireSeg类型的东西。如果您想要对象的地址而不是对象本身,那么可以创建一个指针,您需要添加地址运算符(&)。

07-26 07:56