1

My Thingクラスは、次のコンストラクターを持つEntityクラスから派生しています。

    Entity::Entity(string sNames, double xcord, double ycord)
    :m_sName(sNames), m_dX(xcord),m_dY(ycord){}

Thingのコンストラクターは

    Thing::Thing(string sName, double xcord, double ycord):
    Entity(sName, xcord, ycord),
    m_iHealth(100),m_Weapon(Weapon("Fists", false, 10.0, 5, 1.0, xcord, ycord)){}

問題は、Thingコンストラクターで「適切なデフォルトコンストラクターが利用できません」というエラーが発生することです。デフォルトではなくエンティティコンストラクターを使用するために指定した問題は何ですか。問題をさらに混乱させるために、エンティティから派生した別のクラスが機能します

    Weapon::Weapon(string sName, bool iMagical, double dRange, int iDamage,double
    dRadius, double dSpawnX, double dSpawnY):
    Entity(sName, dSpawnX, dSpawnY), m_bMagical(iMagical), m_dRange(dRange), m_iDamage(iDamage),
    m_dRadius(dRadius)
{
}

これはエラーなしで実行されますが、より多くの変数を持つ私のThingコンストラクターとまったく同じもののようです。私は何か小さなものが欠けていると確信していますが、しばらくの間困惑しています。

コメントアウトされなかったコードが残っていたのは正しかったです。メンバー変数の減速のエラーがコンストラクターに表示されるのは奇妙に思えますが、とにかく感謝します。それはいつも帽子が私を得る単純なものです。

4

2 に答える 2

0

おそらくThing、実際にはデフォルトのコンストラクターがなく、必要です。このようなプログラムは、ご覧のようなエラーを生成する可能性があります。

#include <string>
using std::string;

struct Entity {
  std::string m_sName;
  double m_dX, m_dY;
  Entity(std::string, double, double);
};
struct Weapon : Entity {
  bool m_bMagical;
  double m_dRange;
  int m_iDamage;
  double m_dRadius;
  Weapon(std::string, bool, double, int, double, double, double);
};
struct Thing : Entity {
  int m_iHealth;
  Weapon m_Weapon;
  Thing(std::string, double, double);
};


// OP's code starts here
Entity::Entity(string sNames, double xcord, double ycord)
    :m_sName(sNames), m_dX(xcord),m_dY(ycord){}

Thing::Thing(string sName, double xcord, double ycord):
    Entity(sName, xcord, ycord),
    m_iHealth(100),m_Weapon(Weapon("Fists", false, 10.0, 5, 1.0, xcord, ycord)){}

Weapon::Weapon(string sName, bool iMagical, double dRange, int iDamage,double
    dRadius, double dSpawnX, double dSpawnY):
    Entity(sName, dSpawnX, dSpawnY), m_bMagical(iMagical), m_dRange(dRange), m_iDamage(iDamage),
    m_dRadius(dRadius)
{
}
// OP's code ends here

int main () {
  Thing th;
}

g++ では、正確なエラーは次のとおりです。

th.cc: In function ‘int main()’:
th.cc:40: error: no matching function for call to ‘Thing::Thing()’
th.cc:27: note: candidates are: Thing::Thing(std::string, double, double)
th.cc:16: note:                 Thing::Thing(const Thing&)
于 2012-11-17T00:00:36.233 に答える
0

が、 、または同等のものではなく、 としてThing::m_Weapon宣言されていると仮定すると、これを変更する必要があります。WeaponWeapon*Weapon&

m_Weapon(Weapon("Fists", false, 10.0, 5, 1.0, xcord, ycord))

これに

m_Weapon("Fists", false, 10.0, 5, 1.0, xcord, ycord)

tempを作成してから、その tempWeaponから作成しようとしm_Weaponています。おそらく入力として を受け取るWeaponコピー コンストラクターはありません。Weapon

于 2012-11-17T00:22:56.010 に答える