我有两个头文件(A.h包含类A,B.h包含类B)。 A类有一个指向B类的指针,而B类的构造函数需要一个指向A类的指针。
错误:使用未定义类型'A'
A.h:
#pragma once
#include "B.h"
class A {
public:
B* ClassB;
A(){
ClassB = new B(this);
}
inline void FunctionFromA() {}
};
B.h:
#pragma once
class A;
class B {
public:
A* ClassA;
B(A* classa) {
ClassA = classa;
}
void DoSomethingfromA() {
ClassA->FunctionFromA();
}
};
编辑:
我找到了一种工作方式,它给出了一个错误“不允许输入不完整的类型”,但是仍然可以工作吗?.. i包括了类中的头文件
A.h:
#pragma once
class B;
class A {
public:
#include "B.h" //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
B* ClassB;
A(){
ClassB = new B(this);
}
inline void FunctionFromA() {}
};
B.h:
#pragma once
class B {
public:
#include "A.h" //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
A* ClassA;
B(A* classa) {
ClassA = classa;
}
void DoSomethingfromA() {
ClassA->FunctionFromA();
}
};
答案 0 :(得分:-2)
这将不起作用,因为C ++不允许您包含包含当前文件本身的文件。另外,重新定义类A将不起作用,因为除了您提供的声明外,编译器还不知道它。