嵌套类C ++中的前向声明

时间:2016-04-01 19:13:08

标签: c++ class nested forward-declaration

我遇到以下类嵌套的问题:

#include <iostream>

class A;

class B
{
  public:
    void test(A* a); 
    {
      a->x = 'a';
    };
};

class A
{
  public:
    char x;
    B b;
};

int main(void)
{
  A* a = new A();
}

详细说明,类A具有类B的实例,类B在方法中修改类A的对象。这会引发错误:

  

main.cpp:16:4:错误:无效使用不完整类型'A类'a-&gt; x   =&#39; a&#39;;

到目前为止,没有任何意外,因为编译器还不知道A的属性。一个简单的解决方法是在完全声明A类之后放置B :: test(A * a)的定义,如下所示:

#include <iostream>

class A;

class B
{
  public:
    void test(A* a); 
};

class A
{
  public:
    char x;
    B b;
};

void B::test(A* a)
{
  a->x = 'a';
}

int main(void)
{
  A* a = new A();
}

但是,在我的实际代码中,这些类位于单独的头文件和各个.cpp文件中的方法定义中,这些文件与头文件一起编译。

这类问题的适当解决方法是什么?

0 个答案:

没有答案
相关问题