无法将类型转换为类型*-C++编译错误

Cannot convert type to type* - C++ compile error

本文关键字:-C++ 编译 错误 类型 类型转换      更新时间:2023-10-16

我正在尝试创建一个包含'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数组中的一个元素,也是一个指针(不是吗?)。

我试着摆弄它,并声明parentWireSegWireSeg:类型

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*类型的,所以当你通过执行*wireSegwireSeg[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的地址是相同的。