Visual C ++2010Expressの一部のコードに問題があります。デフォルト値の引数を受け入れるコンストラクターを持つクラスを作成しようとしています。これが私が達成しようとしていることを示す短いプログラムです:
//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
とClass test(10)
、mValue
正しく初期化されます。
しかし、2番目のプログラムでは、まったく同じことをしようとしています。私はこのように定義されたクラスを持っています:
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のデフォルトコンストラクターは存在しない」と言っています。どうしてこれなの?