【问题标题】:How to make classes using each other如何让课堂互相使用
【发布时间】:2017-03-25 00:29:01
【问题描述】:
class A;
class B;

class A
{   
public:
    A(B * b) : b(b)
    {   
        b->foo(this);
    }   
private:
    B * b;
};  

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

编译这段代码给了我

incomplete-type.hpp: In constructor ‘A::A(B*)’:
incomplete-type.hpp:9:4: error: invalid use of incomplete type ‘class B’
   b->foo(this);
    ^~

但我确实需要这些类通过指针相互使用。我该怎么做?

【问题讨论】:

  • 在类定义之外和两个类都被定义之后定义构造函数。

标签: c++ class pointers circular-dependency incomplete-type


【解决方案1】:

将实际使用另一种类型的函数定义移到下面,两种类型都完整。

class A;
class B;

class A
{   
public:
    A(B * b);
private:
    B * b;
};  

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

inline A::A(B * b) : b(b)
{
    b->foo(this);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 2017-01-09
    相关资源
    最近更新 更多