我在使用Visual C++ 2010学习版中的某些代码时遇到问题。我正在尝试创建一个具有构造函数的类,该构造函数接受具有默认值的参数。下面是一个简短的程序,它展示了我想要实现的目标:
//Class declaration
class Class {
private:
int mValue;
public:
Class(int);
int GetValue();
};
Class::Class(int val=1) : mValue(val)
{
}
int Class::GetValue()
{
return mValue;
}
int main()
{
Class test;
cout << test.GetValue() << endl;
}现在,这似乎工作得很好。比方说,如果我用Class test(10)替换Class test,那么mValue是正确初始化的。
然而,在第二个程序中,我试图做完全相同的事情。我有一个定义如下的类:
namespace mobs {
Class Monster {
private:
mHitPoints;
public:
Monster(int);
int GetHitPoints() const;
};
}通过如下函数的实现:
namespace mobs {
Monster::Monster(int hp=10) : mHitPoints(hp)
{
}
int Monster::GetHitPoints() const
{
return mHitPoints;
}
}但是当我尝试声明一个类并像这样使用GetHitPoints()函数时:
mobs::Monster testmonster;
cout << testmonster.GetHitPoints() << endl;Visual C++告诉我“类mobs::Monster不存在默认的构造函数”。为什么会这样呢?
发布于 2012-07-09 03:57:25
默认值属于声明,而不是定义。将=10移至您的头文件:
Monster(int hp = 10)。
在实现中,您甚至不需要缺省值。我通常使用:
Monster::Monster(int hp /*=10*/)
只是为了说明一下,这里有一个默认设置。
发布于 2012-07-09 04:02:06
构造函数不明确。怪不得。如果您有两个构造函数
Monster(){}
Monster(x=10){}然后你调用一个Monster m();
编译器应该如何知道是指第一个构造函数还是第二个构造函数,并按如下方式定义它
class Class {
private:
int mValue;
public:
Class(int val) :mValue(val){}
Class() :mValue(1){}
};https://stackoverflow.com/questions/11386159
复制相似问题