我正在尝试创建一个类型为'T'的动态数组,其中包含一个类型为'X'的数组。为了从X访问T的属性,我尝试在struct 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];
}
}
}
我收到编译错误:
错误:无法在赋值
中将'WireSeg'转换为'WireSeg *'
我不明白。 parentWireSeg
已被声明为WireSeg
类型指针,wireSeg[i]
也是wireSeg
数组中的一个元素,并且是一个指针(不是吗?)。
我尝试使用它并声明parentWireSeg
属于WireSeg
类型:
struct Track {
int trackNum;
bool used;
bool flag;
WireSeg parentWireSeg;
};
这给了我错误:
'struct Track'没有名为'parentWireSeg'的成员。
这对我来说没有任何意义,因为struct Track
确实有parentWireSeg
作为元素!有人可以解释一下吗?我不允许Track
中的指针指向WireSeg
?
我可以使用继承的类(可以吗?),但是如果有人告诉我我的方法有什么问题我会更喜欢吗?
答案 0 :(得分:2)
尝试将您执行作业的行更改为:
wireSeg[i].track[j].parentWireSeg = &wireSeg[i];
您看,wireSeg的类型为WireSeg*
,因此当您通过执行*wireSeg
或wireSeg[0]
或wireSeg[i]
取消引用它时,您会获得WireSeg
类型的内容1}}。如果你想要对象的地址而不是对象本身,那么你可以创建一个指针,你需要添加地址运算符(&amp;)。
答案 1 :(得分:1)
wireSeg [i]也是wireSeg数组中的一个元素,是一个指针(不是吗?)。
不,wireSeg[i]
是wireSeg
,而不是指向wireSeg
的指针。
例如,如果您有int foo[4] = {1, 2, 3, 4}
,那么foo[0]
将是int
,而不是int *
,对吧?
您需要&wireSeg[i]
来获取指针;或只是wireSeg + i
,因为wireSeg
可以被视为指针,添加i
与获取元素i
的地址相同。