【发布时间】:2013-02-15 17:41:50
【问题描述】:
下面我复制了我的部分代码的简化版本,它在编译时会出错。
testing.cpp
#include <iostream>
#include "../Beta.h"
#include "../Alpha.h"
using namespace std;
int main() {
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
return 0;
}
Alpha.h
#include <vector>
class Alpha
{
public:
typedef struct _info{
int k;
} info;
friend class Beta;
};
Beta.h
#include <vector>
class Alpha;
class Beta
{
public:
std::vector <Alpha::info*> vecInfo;
};
当我运行 g++ testing.cpp 时,我收到以下错误消息
在 testing.cpp:10:0: ../Beta.h:8:15: 错误中包含的文件中:
嵌套名称说明符中使用的不完整类型“Alpha”../Beta.h:8:15:
错误:嵌套名称说明符中使用的类型“Alpha”不完整
../Beta.h:8:27: 错误:模板参数 1 无效../Beta.h:8:27:
错误:模板参数 2 无效
我可以从论坛帖子中看到第一个错误是由于某种循环依赖(Error: incomplete type used in nested name specifier)。我看不到我的代码和他们的代码之间的相似性。我做错了什么。
【问题讨论】:
-
这不是循环依赖。这只是意味着您不能引用
Alpha::info*,因为之前没有声明过。