use*_*107 1 c++ g++ class vector
下面我复制了我的部分代码的简化版本,在编译时会出错.
testing.cpp
#include <iostream>
#include "../Beta.h"
#include "../Alpha.h"
using namespace std;
int main() {
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Alpha.h
#include <vector>
class Alpha
{
public:
typedef struct _info{
int k;
} info;
friend class Beta;
};
Run Code Online (Sandbox Code Playgroud)
Beta.h
#include <vector>
class Alpha;
class Beta
{
public:
std::vector <Alpha::info*> vecInfo;
};
Run Code Online (Sandbox Code Playgroud)
当我运行时,g++ testing.cpp我收到以下错误消息
在tests.cpp中包含的文件中:10:0:../ Bella.h:8:15:错误:
嵌套名称说明符中使用的不完整类型'Alpha'../Beta.h:8:15:
错误:嵌套名称说明符中使用的不完整类型"Alpha"
../Beta.h:8:27:错误:模板参数1无效../Beta.h:8:27:
错误:模板参数2无效
我可以从论坛帖子看到第一个错误是由于某种循环依赖(错误:嵌套名称说明符中使用的不完整类型).我无法看到我的代码和代码之间的相似性.我究竟做错了什么.
这实际上不是循环依赖. Beta.h只需要#include "Alpha.h"而不是前向声明class Alpha;.