最近写一些小的作业的时候出现的问题。问题大概如下
#include<iostream>
using namespace std;
class B;
class A {
public:
//A中定义的类B对象
B* obj;
//初始化对象
A() {
obj = new B;
}
//访问类B中的成员
void printB() {
cout << "类B中的成员b=" << obj->b << endl;
}
};
class B {
public:
int b ;
//给b初始化
B() {
b = 10;
}
};
int main() {
A a;
a.printB();
return 0;
}
此时出现错误类B类型未定义
即使使用了向前定义依旧出错,问题原因:使用向前声明之后,在类定义之前,类是一个不完全类型(incompete type),即已知向前声明过的类是一个类型,但不知道包含哪些成员,所以在使用向前声明后,类定义前,只能定义指向该类型的指针及引用而不能使用该类成员。
所以做出修改,让所有函数都用类外调用,并且放在类的后面即可。
#include<iostream>
using namespace std;
class B;
class A {
public:
//A中定义的类B对象
B* obj;
//初始化对象
A();
//访问类B中的成员
void printB();
};
class B {
public:
int b ;
//给b初始化
B();
};
//A类的类外调用
//初始化对象
A::A() {
obj = new B;
}
//访问类B中的成员
void A::printB() {
cout << "类B中的成员b=" << obj->b << endl;
}
//类B的类外调用
B::B() {
b = 10;
}
int main() {
A a;
a.printB();
return 0;
}
此外也可以采用单独编译的方法,具体可看下方博客。
参考博客:https://blog.csdn.net/qq_43915356/article/details/107577450