【问题标题】:C++ circular dependecies [duplicate]C ++循环依赖项[重复]
【发布时间】:2018-05-05 09:28:55
【问题描述】:

我有一个未解决的问题,我想问一下 C++ 中的循环依赖关系。 假设我有两个类继承自另一个类。在所有这三个类的定义中,我都有一个成员函数,它从另外两个对象中初始化两个对象,如下所示。

class A{
  public:
  ...
  A* test(){
     A* first=new B();       
     A* second= new C();
   }
 };

 class B:public A{
  public:
  ...
  A* test(){
     A* first=new A();       
     A* second= new C();
   }
 };

 class C:public A{
  public:
  ...
  A* test(){
     A* first=new A();       
     A* second= new B();
   }
 };

我得到的编译器错误是:“错误 C2027:使用未定义类型 'B'”和“错误 C2027:使用未定义类型 'C'”。

【问题讨论】:

标签: c++ inheritance circular-dependency


【解决方案1】:

class A 之前做前向声明,像这样:

class B;
class C;

class A{
//...

不要使用 test() 方法的内联定义,在类之外定义它们:

class A{
public:
    A* test();
};

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

class C:public A{
public:
    A* test(){
        A* first=new A();
        A* second= new B();

        return first; //Add return
    }
};

main.cpp 方法定义中的某处:

A* A::test()
{
    A* first=new B();
    A* second= new C();

    return first; //Add return
}

A* B::test()
{
    A* first=new A();
    A* second= new C();
    return first; //Add return
}

你的方法也应该返回指针,return first;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 2020-11-18
    • 2020-03-14
    相关资源
    最近更新 更多