Ctor不允许返回types
有代码:
struct B { int* a; B(int value):a(new int(value)) { } B():a(nullptr){} B(const B&); } B::B(const B& pattern) { }
我得到错误信息:
'错误1错误C2533:'B :: {ctor}':构造函数不允许返回types'
任何想法为什么?
PS我正在使用VS 2010RC
你在你的struct
定义之后缺less一个分号。
错误是正确的,构造函数没有返回types。 由于缺less分号,整个结构定义被视为函数的返回types,如下所示:
// vvv return type vvv struct { /* stuff */ } foo(void) { }
添加你的分号:
struct B { int* a; B(int value):a(new int(value)) { } B():a(nullptr){} B(const B&); }; // end class definition // ah, no return type B::B(const B& pattern) { }
你需要一个更好的编译器。 用g ++:
a.cpp:1: error: new types may not be defined in a return type a.cpp:1: note: (perhaps a semicolon is missing after the definition of 'B') a.cpp:5: error: return type specification for constructor invalid
分号是需要的,因为它终止了一个可能的结构实例列表:
struct B { ... } x, y, z;
创build三个名为x,y和z的B实例。 这是C ++的C遗产的一部分,在C ++ 0x中仍然存在。