我不确定如何命名这个问题,但您可以从代码中了解正在发生的事情:
typedef struct A {
B* FirstB;
//Some methods...
}
typdef struct B
{
A* FirstA
//Some methods...
}我正在尝试一个结构体,它里面有一个结构体,这个结构体中有一个指向它自身的结构体的实例指针。这很难解释,但代码很好地说明了这一点。
我在C++并不是最棒的,所以有没有人能为我指出做这样的事情的正确方向?谢谢。
发布于 2015-05-03 02:50:52
您最有可能遇到的问题是,在声明另一个结构之前,您无法声明每个指针,因此无法将一个指针放在另一个结构之前。解决方案是向前声明。
struct B;
struct A {
B* FirstB;
//Some methods...
}
struct B
{
A* FirstA
//Some methods...
}第一行告诉编译器有一个名为B的结构。但是,它不会告诉它该结构中有什么。这样,您就可以很好地在A中声明B*。但是,在声明B之前,您将无法取消对该指针的引用,因为在此之前,编译器不知道B实际具有哪些成员。因此,您需要确保在A和B中声明您的方法,但要在这两个方法都声明之后才实现它们。
下面是一个完整的示例,其中包含方法:
struct B;
struct A {
B* FirstB;
int foo();
};
struct B
{
A* FirstA;
int x;
};
A::foo() {
return FirstB->x;
}
int main() {
A outer;
B inner;
outer.FirstB = &B;
inner.FirstA = &A;
inner.x = 3;
outer.foo(); //returns 3
}https://stackoverflow.com/questions/30006100
复制相似问题