-4

Player.h

#ifndef HEADER_GUARD_PLAYER
#define HEADER_GUARD_PLAYER

#include <string>
using std::string;


//Parent player class
class Player
{
      private:        
      protected:
         string playerName; 
         int chipCount;

      public:
         //Constructor
         Player();
         Player(string name);

}; 

//Custom Players

class PlayerSteven: public Player
{
};
class PlayerBlake: public Player
{
};
class PlayerTucker: public Player
{
};
#endif

Player.cpp

#include "Player.h"
#define STARTCHIPS 1500

Player::Player()
{
     chipCount = STARTCHIPS;
     playerName = "Default";          
};
Player::Player(string name)
{
     playerName = name;
};

メイン.cpp

#include <iostream>
#include "Deck.h"
#include "Player.h"
#include <string>

using namespace std;

int main()
{
    Deck deck;
    PlayerSteven steven = new PlayerSteven("Steven");
    PlayerBlake blake = new PlayerBlake("Blake");
    PlayerTucker tucker = new PlayerTucker("Tucker");

    deck.shuffle();
    int x = 0;
    int y = 0;
    for (int i = 0; i < 52; i++)
    {
        deck.nextCard(x,y);
        cout << x << "," << y << endl;
    }
    system("PAUSE");
    return 0;
}

エラー:

11 C:\Users\Documents\temp\p_comp.cpp `PlayerSteven::PlayerSteven(const char[7])' の呼び出しに一致する関数がありません

11 C:\Users\Documents\temp\p_comp.cpp `PlayerSteven::PlayerSteven(const char[7])' の呼び出しに一致する関数がありません

注 C:\Dev-Cpp\PROJECTS\Player.h:26 PlayerSteven::PlayerSteven(const PlayerSteven&)

これをコンパイルする方法を知っている人はいますか?

ありがとう。

4

2 に答える 2

2

C++ では、コンストラクターは継承されません。したがって、それらをサブクラスに追加する必要があります。

class PlayerSteven: public Player
{
public:
    PlayerSteven()
    {}
    PlayerSteven(string name)
    :Player(name)
    {}
};

の他のサブクラスについても同様ですPlayer

十分に最近の C++11 コンパイラがあれば、実際にコンストラクタを継承できますが、明示的に行う必要があります。

class PlayerSteven : public Player
{
public:
    using Player::Player;
};
于 2013-04-30T14:40:36.787 に答える
1

派生型のコンストラクターを宣言して定義する必要があります。

class PlayerSteven: public Player
{
  PlayerSteven() {}
  PlayerSteven(const std::string& s) : Player(s) {}
};

等々。C++11 では、継承されたコンストラクターを使用できます。

class PlayerSteven: public Player
{
  using Player::Player;
};

次に、メインで、PlayerStevenオブジェクトをポインタからへ初期化しようとしていますPlayerSteven:

PlayerSteven steven = new PlayerSteven("Steven");

このような変換を実行するためのコンストラクターはありませんが、おそらくとにかくしたくないでしょう。オブジェクトをインスタンス化することができPlaverStevenます:

PlayerSteven steven("Steven");
于 2013-04-30T14:41:19.017 に答える