C++ C++;:如何使用彼此创建两个类?
我想创建两个相互使用的类。代码如下:C++ C++;:如何使用彼此创建两个类?,c++,class,forward-declaration,C++,Class,Forward Declaration,我想创建两个相互使用的类。代码如下: class B; class A { public: A(B* b) : b(b) {} void Foo() { b->data++; } B* b; }; class B { public: void Boo() { A a(this); a.Foo(); } int data = 0; }; int main() { B b;
class B;
class A {
public:
A(B* b) : b(b) {}
void Foo() {
b->data++;
}
B* b;
};
class B {
public:
void Boo() {
A a(this);
a.Foo();
}
int data = 0;
};
int main()
{
B b;
b.Boo();
}
当我在visual Studio 2015中编译它时,我得到了一个错误:
错误C2027:使用未定义的类型“B”
指向第六行:b->data++代码>
我读过这个问题,但我使用了前向声明,这样A应该知道B的存在。而且,我没有“两个类直接包含另一种类型的对象”,因为只有B包含A,但A不包含B;它使用一个指向B的指针。而且,我的代码似乎与答案没有本质上的区别,因为在那里,世界类包含Agent的对象,并且这两个类相互使用。但我的代码就是无法编译。所以我认为我的问题不是重复的。你能帮我解决这个共同使用的问题吗?非常感谢。1)这已经被问过无数次了;请用谷歌搜索一下。2) 您需要在定义B
之前A::Foo()
,然后在定义B
之后A::Foo{}
。@Qix:我已经在最后详细解释了,我已经阅读了该问题,并遵循了它,但仍然出现了错误。你读过吗?问题是不同的。你的评论也显示了这一点。你为什么这么挑剔?你没有完全使用转发声明,也没有彻底阅读我的评论。您转发声明的类别B代码>但您声明并定义了A::Foo
——此时B
尚未定义。您需要声明(并且只声明)A::Foo
,定义B
,然后定义A::Foo
@Qix:问题不在于进行正向声明,而在于我知道正向声明,但不知道如何正确地进行正向声明。你能感觉到区别吗?你能找到一个重复的问题,指出正确的转发声明吗?是你“没有仔细阅读我的评论”。1)这已经被问过无数次了;请用谷歌搜索一下。2) 您需要在定义B
之前A::Foo()
,然后在定义B
之后A::Foo{}
。@Qix:我已经在最后详细解释了,我已经阅读了该问题,并遵循了它,但仍然出现了错误。你读过吗?问题是不同的。你的评论也显示了这一点。你为什么这么挑剔?你没有完全使用转发声明,也没有彻底阅读我的评论。您转发声明的类别B代码>但您声明并定义了A::Foo
——此时B
尚未定义。您需要声明(并且只声明)A::Foo
,定义B
,然后定义A::Foo
@Qix:问题不在于进行正向声明,而在于我知道正向声明,但不知道如何正确地进行正向声明。你能感觉到区别吗?你能找到一个重复的问题,指出正确的转发声明吗?是你“没有仔细阅读我的评论”。