2012-11-12 91 views
1

當我這樣做,我的編譯器抱怨。有3個錯誤是出現,雖然沒有錯誤信息可見:爲什麼我不能在我的課堂上做這個對象聲明?

#include <stdlib.h> 
#include <vector> 
#include <string> 
#include "ParseException.h" 
#include "CycleFoundException.h" 
#include "UnknownTargetException.h" 

using namespace std; 

class Maker 
{ 
private: 
vector<Node> storage; 

public: 
Maker(string file) throw (ParseException, CycleFoundException, UnknownTargetException); 
vector<string> makeTarget(string targetName);  
}; 

struct Node 
{ 
    string target; 
    vector<string> dependencies; 
    string command; 
    int discoverytime; 
    int finishtime; 
    int visited; 
    Node* next; 
}; 

編譯器不喜歡我vector<Node> storage聲明。當我做vector<int> storage而不是,它編譯沒有投訴。在另一個類中聲明一個類的對象是錯誤的嗎?我認爲這是正確的。

+0

上面'class Maker'添加'class Node;'這稱爲前向聲明。 – andre

回答

7

看起來你需要把Node的定義放在Maker的定義之前。

您在Maker的定義中使用的類型名稱Node(在該行vector<Node> storage),但因爲還沒有定義Node但編譯器不知道它是什麼。

+0

重新安排類的順序解決問題呢? –

+1

它應該。試一試,看看它是否編譯。 – Dan

+0

是的,這是有效的。謝謝 :) –

相關問題