C++ 未命名结构的构造函数
我有一门课是这样的:C++ 未命名结构的构造函数,c++,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 no
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;
//...
};
模板
书包
{
公众:
私人:
typedef结构{void*prev;结构{T项;无符号整数计数;}体;void*next;}*节点;
类型定义结构{
节点运算符->(){return current;}
操作符(){;}/给它取个好名字:-)
编辑:LOL抱歉,写错了,但原理是一样的:-)无法为bag::iterator
编写构造函数,因为iterator是一个typedef名称,禁止用作构造函数名称:
14882:2003 12.1/3
命名类的typedef名称不得用作构造函数声明的声明器中的标识符
标准中甚至有一个例子,尽管在不同的段落中,7.1.3/5
:
typedef struct {
S(); //error: requires a return type because S is
// an ordinary member function, not a constructor
} S;
如果您需要一个用户定义的构造函数,则必须给该结构一个名称。<代码> TyPufFrxt{{} name;< /COD>编程风格通常被C++样式指南所劝阻,而不是“代码>结构名称{};< /COD>。< /P>一个“没有命名的”结构被称为匿名。@ Peter G.:不匿名,这是一个“在typedef声明中定义的未命名类”
7.1.3/5
谢谢Cubbi,我将得到更正。
typedef struct {
S(); //error: requires a return type because S is
// an ordinary member function, not a constructor
} S;