问题描述
我正在尝试创建一个动态类型为 T的数组,其中包含一个类型为 X的数组。为了从X访问T的属性,我尝试在结构X中创建一个指向T的指针。这是我拥有的代码:
I am trying to create a dynamic array of type 'T' that contains an array of type 'X'. In order to access attributes of T from X, I tried creating a pointer in struct X that points to T. This is the code I have:
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];
}
}
}
我得到了编译错误:
我不明白。 parentWireSeg
被声明为 WireSeg
类型指针和 wireSeg [i]
也是 wireSeg
数组中的一个元素,并且是一个指针(不是吗?)。
I don't get it. parentWireSeg
has been declared as a WireSeg
type pointer and wireSeg[i]
is also an element in the wireSeg
array and is a pointer (isn't it?).
我尝试使用它,并声明 parentWireSeg
的类型为 WireSeg
:
I tried playing around with it and declared parentWireSeg
to be of type WireSeg
:
struct Track {
int trackNum;
bool used;
bool flag;
WireSeg parentWireSeg;
};
这给了我错误:
这对我来说也没有意义,因为struct Track
确实具有 parentWireSeg
作为元素!有人可以解释一下吗?我是否不允许在 Track
中有一个指向 WireSeg
的指针?
This makes no sense to me either since struct Track
does have parentWireSeg
as an element! Can someone please explain this? Am I not allowed to have a pointer in Track
that points to WireSeg
?
我可能可以使用继承的类(可以吗?),但是如果有人告诉我我的方法出了什么问题,我希望这样做?
I can probably use inherited classes (can I?) for this but I would prefer if someone told me what is wrong with my method?
推荐答案
尝试将执行分配的行更改为:
Try changing the line where you do the assignment to:
wireSeg[i].track[j].parentWireSeg = &wireSeg[i];
您看到的是,wireSeg的类型为 WireSeg *
,因此当您通过执行 * wireSeg
或 wireSeg [0]
或 wireSeg取消引用它时[i]
,您得到的类型为 WireSeg
。如果您想要对象的地址而不是对象本身,那么可以创建一个指针,则需要添加地址运算符(&)。
You see, wireSeg is of type WireSeg*
, so when you dereference it by doing *wireSeg
or wireSeg[0]
or wireSeg[i]
, you get something that is of type WireSeg
. If you want the address of the object instead of the object itself, so you can make a pointer, you need to add the address operator (&).
这篇关于无法将类型转换为类型*-C ++编译错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!