class A的成员函数要使用class B对象、指针、引用,必须在class B 的定义之后,而不是声明之后。不像C语言中,
函数的声明在调用该函数的函数之前,而函数定义可以在该函数之后。如下例子:
#include <iostream>
#include <algorithm>
using namespace std;
class B;
class A
{
private:
int a;
public:
A(int x=0):a(x){}
int getB(B *b);
};
int A::getB(B *b) //这个成员函数的定义在class B定义之前,会报以下错误:
{ //use of undefined type 'B'
return b->getb(); //see declaration of 'B'
} //left of '->getb' must point to class/struct/union
class B
{
private:
int b;
public:
B(int x=0):b(x){}
int getb()
{
return b;
}
};
int main(void)
{
A a(2);
B b(3);
cout<<a.getB(&b)<<endl;
return 0;
}
改正:将class A使用到class B的成员函数的定义放在class B的定义之后,则程序可以正常运行。
发现了问题,小小总结下,避免以后忽视了这个问题而浪费大量时间做无用功。