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

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

我正在尝试创建一个类型为“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];
    }
  }
}
这给了我一个错误:

“struct Track”没有名为“parentWireSeg”的成员

这对我来说也没有意义,因为struct
Track
确实有
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
的结果是指针。