2012-10-08 38 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;