当两个类相互依赖时,可以通过使用前置声明或者将类的定义放在头文件之外的方式解决类的不完整类型。
例如:
// ClassB.h
class ClassA; // 前置声明ClassA
class ClassB {
public:
void doSomething(ClassA* obj);
};
// ClassA.h
class ClassB; // 前置声明ClassB
class ClassA {
public:
void doSomething(ClassB* obj);
};
// ClassA.cpp
#include "ClassA.h"
#include "ClassB.h"
void ClassA::doSomething(ClassB* obj) {
// 使用ClassB的成员函数或成员变量
}
// ClassB.cpp
#include "ClassA.h"
#include "ClassB.h"
void ClassB::doSomething(ClassA* obj) {
// 使用ClassA的成员函数或成员变量
}
例如:
// ClassA.h
class ClassB; // 前置声明ClassB
class ClassA {
public:
void doSomething(ClassB* obj);
};
// ClassB.h
#include "ClassA.h"
class ClassB {
public:
void doSomething(ClassA* obj);
};
// ClassA.cpp
#include "ClassA.h"
#include "ClassB.h"
void ClassA::doSomething(ClassB* obj) {
// 使用ClassB的成员函数或成员变量
}
// ClassB.cpp
#include "ClassA.h"
#include "ClassB.h"
void ClassB::doSomething(ClassA* obj) {
// 使用ClassA的成员函数或成员变量
}
这样,当需要使用类的成员函数或成员变量时,只需要包含相应的头文件即可。
总结:以上是解决C++中当两个类相互依赖时如何解决类的不完整类型的两种常见方法。无论是使用前置声明还是将类的定义放在头文件之外,都可以解决类的不完整类型问题,让两个相互依赖的类正常使用彼此的成员函数和成员变量。
领取专属 10元无门槛券
手把手带您无忧上云