构造函数的参数
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;
};
Main.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:\用户\文档\ temp中\ p_comp.cpp没有用于调用PlayerSteven :: Play的匹配函数erSteven(为const char [7]) '
11 C:\用户\文档\ TEMP \ p_comp.cpp没有匹配函数调用`PlayerSteven :: PlayerSteven(为const char [7])'
音符C:\ Dev-Cpp \ PROJECTS \ Player.h:26 PlayerSteven :: PlayerSteven(const PlayerSteven &)
任何人都知道我可以得到这个编译?
谢谢。
在C++构造函数中没有继承。所以,你必须将它们添加在子类:
class PlayerSteven: public Player
{
public:
PlayerSteven()
{}
PlayerSteven(string name)
:Player(name)
{}
};
与同为中Player
其他子类。
如果你有一个足够新的C++编译器11实际上你可以继承构造函数,但你必须这样做明确:
class PlayerSteven : public Player
{
public:
using Player::Player;
};
在C++ 11中,使用Player :: Player应该就足够了(显然,在支持它的编译器上)。 – mfontanini 2013-04-30 14:41:36
好吧我添加了每个子类的构造函数,但是我收到了新错误:从'PlayerSteven'转换为非标量类型'PlayerSteven'请求 – Steven 2013-04-30 14:54:15
@Steven:是的,与前一个无关,并暗示在@Chad删除的答案中。这是C++,而不是Java或C#:不写'PlayerSteven steven = new PlayerSteven(“Steven”);',只是'PlayerSteven steven(“Steven”);'或者如果你需要它是动态的:'PlayerSteven * steven = new PlayerSteven(“Steven”);',但你必须在某处删除它。 – rodrigo 2013-04-30 15:02:24
您需要声明并定义为派生类型构造函数:
class PlayerSteven: public Player
{
PlayerSteven() {}
PlayerSteven(const std::string& s) : Player(s) {}
};
等等。在C++ 11中,您可以使用inherited constructors。
class PlayerSteven: public Player
{
using Player::Player;
};
接下来,在你的主,你正试图从一个指针PlayerSteven
对象初始化为PlayerSteven
:
PlayerSteven steven = new PlayerSteven("Steven");
你没有构造函数来执行这样的转换,这你可能不无论如何。你可以实例化一个PlaverSteven
对象:
PlayerSteven steven("Steven");
你试过了什么? – djechlin 2013-04-30 14:43:28
为什么你让你的“自定义球员”强壮的类型?它们与基础'Player'类没有什么不同,并且你没有做任何与需要的类型相关的特定任何东西。例如,正确的方法是实例化实际类型,即Player Steven(“Steven”)。 – Chad 2013-04-30 14:46:09
@djechlin:你什么意思?他试图编译这个问题中的代码。 – 2013-04-30 14:47:01