1

C++ サイトのクラス チュートリアルを読んだ後、次のコードを学び、それを使用してみました。

class CVector {
  public:
    int x,y;
    CVector () {};
    CVector (int,int);
    CVector operator + (CVector);
};

CVector::CVector (int a, int b) {
  x = a;
  y = b;
}

その後、C++ クラスを効率的にプログラミングし、よりクリーンなコードを書くことを学ぶために、次のコードを書きました。

class Player {
public:
    string name;
    int level;
};

Player::Player(int y) {
    level = y;
}

ただし、エラー C2511: 'Player::Player(int)' : overloaded member function not found in 'Player' が表示されます。エラーを検索しましたが、修正方法が見つかりませんでした。このコードの何が問題になっていますか?

4

3 に答える 3

5

単一のパラメーター構造を宣言する必要があります。

class Player {
public:
    Player(int y);
    std::string name;
    int level;
};

これを行うと、コンパイラで合成された既定のコンストラクターがなくなるため、必要な場合は独自に作成する必要があります。explicitからの暗黙的な変換が必要ない場合は、単一パラメーター コンストラクターを作成することも検討してくださいint

class Player {
public:
    explicit Player(int y); // no implicit conversions from int
    Player() :name(), int() {} // default constructor and implementation
    std::string name;
    int level;
};

また、可能であれば、コンストラクター本体で値を割り当てるよりも、コンストラクターの初期化リストを優先してください。そのトピックに関するSOの質問はたくさんあるので、ここでは詳しく説明しません. これはあなたがそれを行う方法です:

Player::Player(int y) : level(y) {
}
于 2012-08-14T15:52:56.163 に答える
2

このコンストラクターの宣言をクラス内に追加します。

class Player {
public:
    Player( int y );
    string name;
    int level;
};
于 2012-08-14T15:52:46.103 に答える
1
class Player 
{ 
public:
 Player(int );    
 string name;
 int level;
 };
于 2012-08-14T15:54:12.607 に答える