我正在尝试创建一个'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
数组中的一个元素,并且是一个指针(不是吗?)。我尝试使用它,并声明
parentWireSeg
为WireSeg
类型:struct Track {
int trackNum;
bool used;
bool flag;
WireSeg parentWireSeg;
};
这给了我错误:
这对我来说也没有意义,因为struct
Track
确实将parentWireSeg
作为元素!有人可以解释一下吗?我是否不允许在Track
中指向WireSeg
的指针?我可能可以使用继承的类(可以吗?),但是如果有人告诉我我的方法有什么问题,我希望这样做。
最佳答案
尝试将进行分配的行更改为:
wireSeg[i].track[j].parentWireSeg = &wireSeg[i];
您会看到,wireSeg的类型为
WireSeg*
,因此当您通过执行*wireSeg
或wireSeg[0]
或wireSeg[i]
取消引用它时,您会得到WireSeg
类型的东西。如果您想要对象的地址而不是对象本身,那么可以创建一个指针,您需要添加地址运算符(&)。