找不到C++默认构造函数

Whe*_*050 2 c++ constructor

我在Visual C++ 2010 Express中遇到了一些代码问题.我正在尝试创建一个具有构造函数的类,该构造函数接受具有默认值的参数.这是一个简短的程序,显示了我想要实现的目标:

//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;
}
Run Code Online (Sandbox Code Playgroud)

现在这似乎工作正常.如果我更换Class testClass test(10),比方说,mValue正确初始化.

但是,在第二个程序中,我试图做同样的事情.我有一个这样定义的类:

namespace mobs {
    Class Monster {
    private:
        mHitPoints;
    public:
        Monster(int);
        int GetHitPoints() const;
    };
}
Run Code Online (Sandbox Code Playgroud)

与这样的功能的实现:

namespace mobs {

    Monster::Monster(int hp=10) : mHitPoints(hp)
    {
    }

    int Monster::GetHitPoints() const
    {
        return mHitPoints;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试声明一个类并使用这样的GetHitPoints()函数时:

mobs::Monster testmonster;
cout << testmonster.GetHitPoints() << endl;
Run Code Online (Sandbox Code Playgroud)

Visual C++告诉我"类mobs :: Monster没有默认的构造函数".为什么是这样?

era*_*ran 5

默认值属于声明,而不是定义.移动=10到您的头文件:

Monster(int hp = 10).

在实现中,您甚至不需要默认值.我通常使用:

Monster::Monster(int hp /*=10*/)

只是为了说明默认值.