下列代码编译的时候会报错如标题
#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);
}