Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何解析头文件中的循环引用_C++_Header Files_Circular Reference - Fatal编程技术网

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(); }