无法将类型转换为类型*-C++编译错误
Cannot convert type to type* - C++ compile error
我正在尝试创建一个包含'X'类型数组的'T'类型的动态数组。为了从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];
}
}
}
我得到编译错误:
错误:无法在分配中将"WireSeg"转换为"WireSeg*">
我不明白。parentWireSeg
已被声明为WireSeg
类型的指针,而wireSeg[i]
也是wireSeg
数组中的一个元素,也是一个指针(不是吗?)。
我试着摆弄它,并声明parentWireSeg
是WireSeg
:类型
struct Track {
int trackNum;
bool used;
bool flag;
WireSeg parentWireSeg;
};
这给了我一个错误:
"struct Track"没有名为"parentWireSeg"的成员。
这对我来说也没有意义,因为结构Track
确实有parentWireSeg
作为元素!有人能解释一下吗?是否不允许我在Track
中有指向WireSeg
的指针?
我可能可以使用继承类(可以吗?),但我更希望有人告诉我我的方法出了什么问题?
尝试将执行赋值的行更改为:
wireSeg[i].track[j].parentWireSeg = &wireSeg[i];
你看,wireSeg是WireSeg*
类型的,所以当你通过执行*wireSeg
、wireSeg[0]
或wireSeg[i]
来取消引用它时,你会得到WireSeg
类型的东西。如果你想要对象的地址而不是对象本身,这样你就可以制作一个指针,你需要添加地址运算符(&)。
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
的地址是相同的。