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

时间:2012-09-26 03:20:01

标签: c++ compiler-errors

我正在尝试创建一个类型为'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

我可以使用继承的类(可以吗?),但是如果有人告诉我我的方法有什么问题我会更喜欢吗?

2 个答案:

答案 0 :(得分:2)

尝试将您执行作业的行更改为:

wireSeg[i].track[j].parentWireSeg = &wireSeg[i];

您看,wireSeg的类型为WireSeg*,因此当您通过执行*wireSegwireSeg[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的地址相同。