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中仍然存在。