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:问题不在于进行正向声明,而在于我知道正向声明,但不知道如何正确地进行正向声明。你能感觉到区别吗?你能找到一个重复的问题,指出正确的转发声明吗?是你“没有仔细阅读我的评论”。