2012-10-08 56 views
0

我不能在類內執行typedef嗎?classdef裏面的類

#include <vector> 
using namespace std; 
    class List { 
    public: 
      typedef int Data; 
      class iterator; 
      pair<iterator,bool> insert(const Data nodeId); //<-error 
    private: 
    class Node { 
     typedef vector<NodeId> DepList;//<-error 
    }; 
    } 

我得到一個錯誤missing type specifier - int assumed. Note: C++ does not support default-int

+2

你應該總是要小心,看看錯誤發生在哪一行......我添加了'#include ''使用std :: pair;'到文件並且它編譯得很好。 – nneonneo

+0

請提供完整的代碼,構建信息和任何警告(未切割)的輸出('-Wall -Wextra -pedantic ...')。 – moooeeeep

回答

1

可以。

我想錯誤是在這對貨幣上。你有沒有包含正確的頭:

#include <utility> 

另外,如果你沒有using namespace std;usgin std::pair;,你需要寫std::pair,而不是僅僅pair

P.S.請不要使用using namespace std;,尤其是頭文件。

編輯看着你的編輯,你也需要#include <vector>
EDIT2:您還沒有定義NodeId,但你卻用它爲typedef

+0

>>請不要使用命名空間標準,尤其是頭文件 - 爲什麼? – Yakov

+0

因爲包含該頭文件的任何文件都將使用「使用std」 - 混亂名稱空間。 –

+0

@Yakov - 參見http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-a-bad-practice-in-c –

1

這是一個誤導性的錯誤消息。 iteratorNodeId都沒有被定義,所以不能在表達式中使用。

你可以用這方面的工作(做迭代器的引用,向前聲明的類): pair<iterator&,bool> insert(const Data nodeId);

,並添加一個向前聲明節點Id: class NodeId;

然後執行: typedef vector<NodeId&> DepList;