无命名结构的构造函数

时间:2010-10-05 15:10:52

标签: c++

我有类似的课程:

template <class T>
class bag
{
public:

private:
 typedef struct{void* prev; struct{T item; unsigned int count;} body; void* next;}* node; 
 typedef struct{
  node operator->() { return current; }
  operator(){;} // <- i can not do that, right?

 private:
  node current;
 } iterator;
//...
};

那么,如何编写bag :: iterator的构造函数?

2 个答案:

答案 0 :(得分:6)

为它做一个好名字: - )

typedef struct NoName1 {void* prev; NoName1(){}; struct NoName2{T item; unsigned int count; NoName2() {}} body; void* next;}* node;
编辑:大声抱歉,写错了,但原则是一样的: - )

答案 1 :(得分:5)

无法为bag::iterator编写构造函数,因为迭代器是一个typedef名称,禁止将其用作构造函数名称:

14882:2003 12.1/3

  

命名类的 typedef-name 不得在构造函数声明的声明符中用作标识符

标准中甚至有一个例子,尽管在不同的段落中7.1.3/5

typedef struct {
    S();         //error: requires a return type because S is
                 // an ordinary member function, not a constructor
} S;

如果您需要用户定义的构造函数,则必须为该结构命名。无论如何,C ++风格指南通常不鼓励typedef struct { } name;编程风格,支持struct name { };