我有类似的课程:
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的构造函数?
答案 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 { };
。