天天看点

invalid use of incomplete type ‘class B‘

下列代码编译的时候会报错如标题

#include "iostream"
 
class B;
 
class A {
public:
void func(B* para) {
para -> B_func();
}
};
 
class B {
public:
void B_func() {
std::cout << "sml" << std::endl;
}
};
 
int main() {
B* T1 = new B();
A* T2 =new A();
T2 -> func(T1);
}
 
           

修改方法如下:

#include "iostream"

 

//classA中用到了classB的成员,所以classB要放到classA之前

class B {

public:

    void B_func() {

        std::cout << "sml" << std::endl;

    }

};

class A {

public:

    void func(B* para) {

        para -> B_func();

    }

};

int main() {

    B* T1 = new B();

    A* T2 =new A();

    T2 -> func(T1);

}
           

追问:

你说的对,但是现在我不想把B放到A之前。这个只是我举的例子,实际中的代码,A中有B,B中有A,所以在不调整A和B类的位置前提下 怎么解决上面的错误呀,谢谢你了!

追答:

因为classA的func函数使用了B的成员,所以必须在使用之前知道B的定义细节。

你可以把A的func延后实现(只在classA中定义func)。

具体代码如下:

class B;

class A {

public:

    void func(B* para);

};

class B {

public:

    void B_func() {

        std::cout << "sml" << std::endl;

    }

};

void A::func(B* para) {

    para -> B_func();

}

int main() {

    B* T1 = new B();

    A* T2 =new A();

    T2 -> func(T1);

}
           

继续阅读