我有一个element接口,该接口返回当前元素的网格。我有网格,它是元素的集合。网格还引用了网格,因为它想操纵网格。每当我尝试编译时,都会收到错误消息,指出无效使用了不完整的类型“ class Mesh”。
AbsElem.h
class Mesh;
class AbsElem{
virtual Mesh& GetMesh()const = 0;
};
Elem1.h
#include "AbsElem.h"
#include <vector>
class Elem1 : public AbsElem{
Elem1(Mesh& m):my_mesh(m){}
virtual Mesh& GetMesh() const{return my_mesh;}
void DoStuff(){
my_mesh.GetVal();
}
Mesh& my_mesh;
};
Mesh.h
#include "Elem1.h"
class Mesh{
public:
int GetVal(){return 1;}
private:
std::vector<Elem1> collect_elem_;
};
main.cpp
#include "Mesh.h"
int main(){
Mesh m;
}
编译依据:g++ main.cpp
编译错误:
在Mesh.h:1包含的文件中, 来自main.cpp:1:Elem1.h:在成员函数“ void Elem1 :: DoStuff()”中:Elem1.h:10:4:错误:无效使用不完整类型 “类网格” my_mesh.GetVal(); ^ ~~~~~~在Elem1.h:1包含的文件中, 来自Mesh.h:1, 来自main.cpp:1:AbsElem.h:2:7:注意:“类Mesh”类Mesh的前向声明; ^ ~~~