下面我重現了編譯時出現錯誤的部分代碼的簡化版本。這裏有循環依賴嗎?
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
我收到以下錯誤消息
In file included from testing.cpp:10:0: ../Beta.h:8:15: error:
incomplete type ‘Alpha’ used in nested name specifier ../Beta.h:8:15:
error: incomplete type ‘Alpha’ used in nested name specifier
../Beta.h:8:27: error: template argument 1 is invalid ../Beta.h:8:27:
error: template argument 2 is invalid
我可以從論壇主題的第一個錯誤是因爲某種循環依賴(Error: incomplete type used in nested name specifier)的見。我無法看到我的代碼和他們的代碼之間的相似性。我究竟做錯了什麼。
這不是一個循環依賴。它只是意味着你不能引用'Alpha :: info *',因爲它沒有在任何地方聲明過。 – us2012 2013-02-15 17:44:38