今天写了一个类,头文件声明如下:
class CConfigManager
{
public:
CConfigManager(void);
~CConfigManager(void);
}
结果编译器给我报错:
{
public:
CConfigManager(void);
~CConfigManager(void);
}
error C2533: CConfigManager::CConfigManager' : constructors not allowed a return type
我查了下MSDN,MSDN上面说:
编译器错误 C2533
语言筛选器: 全部 语言筛选器: 多个 语言筛选器: Visual Basic 语言筛选器: C# 语言筛选器: C++ 语言筛选器: J# 语言筛选器: JScript
Visual Basic(声明)
Visual Basic(用法)
C#
C++
J#
JScript
错误消息
“identifier”: 构造函数不允许返回类型
构造函数不能有返回类型(甚至不能有 void 返回类型)。
下面的示例生成 C2533:
// C2533.cpp
// compile with: /c
class X {
public:
X();
};
int X::X() {} // C2533
X::X(){} // OK
我当时没有弄明白.实质上编译器的角度来看这是正确的.
当头文件被include以后,也就和cpp文件合成一个文件了,
这个时候就是这种情况了:
class CConfigManager
{
public:
CConfigManager(void);
~CConfigManager(void);
}
CConfigManager::CConfigManager()
{
}
{
public:
CConfigManager(void);
~CConfigManager(void);
}
CConfigManager::CConfigManager()
{
}
这个时候,实际上就像这样了:
class CConfigManager
{} CConfigManager::CConfigManager()
{}
{}
也就是说我这个时候定义了一个类型,并且它是构造函数的返回值类型.编译器告诉我说:
constructors not allowed a return type构造函数不允许返回一个类型.
构造函数是没有返回值类型的....
只是我当时粗心大意,和理解的问题造成这个日志的.
现在特别修改了它,希望其他碰到此类问题的朋友有一些深刻的意义.
我有什么不对之处,也请各位不吝赐教,批评指正.