C++ 如何解析头文件中的循环引用
我有以下头文件(此处简化以便于说明):C++ 如何解析头文件中的循环引用,c++,header-files,circular-reference,C++,Header Files,Circular Reference,我有以下头文件(此处简化以便于说明): #包括 类框; 类项目{ int行; int列; 盒子*盒子; 公众: 项目(方框*b):方框(b){} void thiswontcompile(){box->dosomething();} void foo(); }; 类框{ 向量项; 公众: Box(){} void addsquare(Item*sq){items.push_back(sq);} void bar(){for(inti=0;ifoo();} 无效剂量(); }; 编译器使用thi
#包括
类框;
类项目{
int行;
int列;
盒子*盒子;
公众:
项目(方框*b):方框(b){}
void thiswontcompile(){box->dosomething();}
void foo();
};
类框{
向量项;
公众:
Box(){}
void addsquare(Item*sq){items.push_back(sq);}
void bar(){for(inti=0;ifoo();}
无效剂量();
};
编译器使用thiswontcompile()将对象指向该行,抱怨对不完整类型“类框”的使用无效。我知道我可以通过将此定义移动到实现文件来纠正错误,但有没有办法将所有这些编码保留在头文件中?您可以将
thiswontcompile
的定义移动到头文件的末尾,只需进行f函数内联
#include <vector>
class Box;
class Item {
int row;
int column;
Box *box;
public:
Item(Box *b) : box(b) {}
void thiswontcompile();
void foo();
};
class Box {
std::vector<Item*> items;
public:
Box() {}
void addsquare(Item *sq) { items.push_back(sq); }
void bar() { for (int i=0; i<items.size(); i++) items[i]->foo(); }
void dosomething();
};
inline void Item::thiswontcompile() { box->dosomething(); }
#包括
类框;
类项目{
int行;
int列;
盒子*盒子;
公众:
项目(方框*b):方框(b){}
void thiswontcompile();
void foo();
};
类框{
向量项;
公众:
Box(){}
void addsquare(Item*sq){items.push_back(sq);}
void bar(){for(inti=0;ifoo();}
无效剂量();
};
内联无效项::thiswontcompile(){box->dosomething();}
只需将的定义移动到框
的定义之后即可编译。
#include <vector>
class Box;
class Item {
int row;
int column;
Box *box;
public:
Item(Box *b) : box(b) {}
void thiswontcompile();
void foo();
};
class Box {
std::vector<Item*> items;
public:
Box() {}
void addsquare(Item *sq) { items.push_back(sq); }
void bar() { for (int i=0; i<items.size(); i++) items[i]->foo(); }
void dosomething();
};
inline void Item::thiswontcompile() { box->dosomething(); }