C++ 无法将类型转换为类型*-C++;编译错误
我正在尝试创建一个类型为“T”的动态数组,其中包含一个类型为“X”的数组。为了从X访问T的属性,我尝试在结构X中创建一个指向T的指针。这是我的代码:C++ 无法将类型转换为类型*-C++;编译错误,c++,compiler-errors,C++,Compiler Errors,我正在尝试创建一个类型为“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
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];
}
}
}
这给了我一个错误:
“struct Track”没有名为“parentWireSeg”的成员
这对我来说也没有意义,因为structTrack
确实有parentWireSeg
作为一个元素!有人能解释一下吗?我不允许在轨迹中有指向WireSeg
的指针吗
我可能可以使用继承类(我可以吗?),但是如果有人告诉我我的方法有什么问题,我更愿意这样做。尝试将执行赋值的行更改为:
wireSeg[i].track[j].parentWireSeg = &wireSeg[i];
你看,wireSeg是wireSeg*
类型,所以当你通过执行*wireSeg
或wireSeg[0]
或wireSeg[i]
来解除对它的引用时,你会得到wireSeg
类型的东西。如果您想要对象的地址而不是对象本身,因此可以创建指针,则需要添加地址运算符(&)。尝试将执行赋值的行更改为:
wireSeg[i].track[j].parentWireSeg = &wireSeg[i];
你看,wireSeg是wireSeg*
类型,所以当你通过执行*wireSeg
或wireSeg[0]
或wireSeg[i]
来解除对它的引用时,你会得到wireSeg
类型的东西。如果您想要对象的地址而不是对象本身,因此可以创建指针,则需要添加地址运算符(&)
wireSeg[i]也是wireSeg数组中的一个元素,是一个指针(不是吗?)
不,wireSeg[i]
是一个wireSeg
,而不是指向wireSeg
的指针
例如,如果你有一个intfoo[4]={1,2,3,4}
,那么foo[0]
将是一个int
,而不是int*
,对吗
您需要&wireSeg[i]
来获取指针;或者只是wireSeg+i
,因为wireSeg
可以被视为指针,添加i
与获取元素i
的地址是一样的
wireSeg[i]也是wireSeg数组中的一个元素,是一个指针(不是吗?)
不,wireSeg[i]
是一个wireSeg
,而不是指向wireSeg
的指针
例如,如果你有一个intfoo[4]={1,2,3,4}
,那么foo[0]
将是一个int
,而不是int*
,对吗
您需要&wireSeg[i]
来获取指针;或者仅仅是wireSeg+i
,因为wireSeg
可以被视为一个指针,添加i
与获取元素i
的地址是一样的,你是不是在写有typedef wireSeg*WireSegPtr
的行中缺少了一个分号?这是如何编译的?我认为这只是一个输入错误,因为添加分号会导致无法转换
错误。请发布您在剪切和粘贴中使用的实际代码,而不是进行输入错误。您是否在写typedef WireSeg*WireSegPtr
的行中缺少一个分号?这是如何编译的?我认为这只是一个输入错误,因为添加分号会导致无法转换错误。请发布您在剪切粘贴中使用的实际代码,而不是进行输入错误。哦,我想我的误解是我认为wireSeg[I]是wireSeg类型的指针。我现在明白我的错误了。谢谢大卫。@noobuntu:wireSeg[i]
的一种思考方式是*(wireSeg+i)
。*
操作符当然是去引用指针,所以我们可以看到wireSeg[i]
的结果不是指针(而是完整对象),而wireSeg+i
的结果是指针。哦,我想我的误解是我认为wireSeg[i]是wireSeg类型的指针。我现在明白我的错误了。谢谢大卫。@noobuntu:wireSeg[i]
的一种思考方式是*(wireSeg+i)
。*
操作符肯定是在解引用指针,因此我们可以看到wireSeg[i]
的结果不是指针(而是完整对象),而wireSeg+i
的结果是指针。