0

我正在尝试创建一个“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为 type WireSeg

struct Track {
    int trackNum;
    bool used;
    bool flag;
    WireSeg parentWireSeg;
};

这给了我错误:

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

这对我来说也没有任何意义,因为 structTrack确实有parentWireSeg一个元素!有人可以解释一下吗?我不允许有一个指向的指针TrackWireSeg

我可能可以为此使用继承的类(可以吗?),但如果有人告诉我我的方法有什么问题,我更愿意?

4

2 回答 2

2

尝试将您进行分配的行更改为:

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

你看,wireSeg 是 type WireSeg*,所以当你通过*wireSegor wireSeg[0]or取消引用它时wireSeg[i],你会得到 type 的东西WireSeg。如果你想要对象的地址而不是对象本身,那么你可以做一个指针,你需要添加地址运算符(&)。

于 2012-09-26T03:24:20.950 回答
1

wireSeg[i] 也是 wireSeg 数组中的一个元素并且是一个指针(不是吗?)。

不,wireSeg[i]is 是 a wireSeg,而不是指向 a 的指针wireSeg

例如,如果你有一个int foo[4] = {1, 2, 3, 4},那么foo[0]将是一个int,而不是一个int *,对吧?

你需要&wireSeg[i]得到一个指针;或者只是wireSeg + i, aswireSeg可以看作是一个指针,加法i和获取 element 的地址是一回事i

于 2012-09-26T03:27:11.580 回答