0

私はクラスでの演習として個人的なことに取り組んでいます。背景として、私は基本的に、ボードゲームのプレーヤー用のクラスを作成して、統計を使用した簡単な計算に基づいてターンの順序を追跡したいと考えています。

私の Player クラスには、次のコンストラクタ行が含まれています。

Player(string name, int Dex, int Mod, int Lvl, int diceRoll);

そのプライベートデータは次のとおりです。

int Dex, Mod, Lvl;
string name;

メイン関数には次のものがあり、iostream および string ライブラリが含まれています。

int rollD; //Will be input by the user
Player Derek("Derek", 2, 0, 6, rollD);
//... etc.

コンパイラがスローするエラーは、まさに次のとおりです。

Initiative.obj : エラー LNK2019: 未解決の外部シンボル "public: __thiscall Player::Player(class std::basic_string,class std::allocator >,int,int,int,int)" (??0Player@@QAE@V ?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HHHH@Z) 関数 _main で参照

私はVisual Studio 2012を使用しています。私が知る限り、コンストラクター呼び出しの構文に問題がありますが、正しいと思います。

誰でも私を助けることができますか?「外部シンボル」エラーのある他のスレッドを調べましたが、コードが非常に単純であるため、エラーの原因となった処理を行っていないようです。

ありがとう!

編集:新しいエラー。クラス内のプライベート メンバーの名前を、より簡単に識別できるように変更しました (mDex など)。だから私は次のものを持っています:

Player::Player(string name, int Dex, int Mod, int Lvl, int diceRoll) {
              mName = name;
      mDex = Dex; 
      mMod = Mod;
      mLvl = Lvl;
}

今、私のエラーは文字列名パラメーターにあります。名前を変数ではなく型として定義しているようで、型名の使用は許可されていません。

編集 2:以下の完全なコード。

#include <iostream>
#include <string>

using namespace std;

class Player {
  public:
Player(string name, int Dex, int Mod, int Lvl, int diceRoll);

int calcInitiative(int Dex, int Mod, int Lvl);
int sortInitiative(int Init);

int diceRoll;

  private:

  int mDex, mMod, mLvl;
  string mName;
};

int main() {
int rollD; //To be given by the user later.

Player::Player(string name, int Dex, int Mod, int Lvl, int diceRoll) {
mName(name), mDex(Dex), mMod(Mod), mLvl(Lvl);
}

Player Derek("Derek", 2, 0, 6, rollD);

return 0;
}
4

1 に答える 1

2

のコンストラクターを実装する必要がありますPlayer

クラス内で定義:

class Player{
  //...other stuff
  Player(string name, int Dex, int Mod, int Lvl, int diceRoll):
          name_(name), Dex_(Dex), Mod_(Mod), Lv1_(Lv1), diceRoll_(diceRoll){}
};
//^^^Assume name_ and others are your member variables

クラス外で定義:

Player::Player(string name, int Dex, int Mod, int Lvl, int diceRoll):
          name_(name), Dex_(Dex), Mod_(Mod), Lv1_(Lv1), diceRoll_(diceRoll)
{}

そうしないと、コンパイラはコンストラクタの定義を見つけることができません。

于 2013-05-30T01:18:29.870 に答える