对于这个学校项目,我们需要一个卡类,它包含int rank,char颜色和两个char *到C风格的字符串(用于动作和位置)。我们需要包含以下内容的类:
1)卡片默认构造函数(默认为排名和位置)
2)卡参数化构造函数(所有数据成员作为参数)
3)卡片复制构造函数
我不知道如何在课堂上包含所有这些内容。我不断收到编译器错误,例如“候选人期望_参数,_给定”,候选人是:“然后列出我所有的构造函数。
我不知道如何在课堂上声明这些内容,如何在实现中标题,以及如何调用它们。
现在我有:
class card
{
public:
card(const int, const char*);
~card();
card(const card&);
card(const int, const char, const char*, const char*);
void copyCard(const card&);
void print();
void setColor(const char);
void setRank(const int);
void setAction(const char*);
void setLocation(const char*);
char getColor();
int getRank();
char* getAction();
char* getLocation();
private:
char color;
int rank;
char* action;
char* location;
};
我的构造函数:
card::card(const int newRank = -1, const char* newLocation = "location"){
color='c';
rank=newRank;
action = new char[7];
stringCopy(action, "action");
location = new char[9];
stringCopy(location, newLocation);
}
card::card(const card &newCard){
int length;
color = newCard.color;
rank = newCard.rank;
length = stringLength(newCard.action);
action = new char[length+1];
length = stringLength(newCard.location);
location= new char[length+1];
stringCopy(action, newCard.action);
stringCopy(location, newCard.location);
}
card::card(const int newRank, const char newCol, const char* newAct,
const char* newLoc){
int length;
color = newCol;
rank = newRank;
length = stringLength(newAct);
action = new char[length+1];
length = stringLength(newLoc);
location = new char[length+1];
stringCopy(action, newAct);
stringCopy(location, newLoc);
}
我在调用构造函数的地方得到编译器错误(到目前为止):
card first;
和
miniDeck = new card[ 4 ];
我知道我需要告诉编译器哪个构造函数是哪个。但是如何?
答案 0 :(得分:3)
问题是你实际上没有默认构造函数。类的默认构造函数是这样的,即没有传入任何参数,例如,它有空参数列表,因此它的签名看起来像card()
。
//编辑:
现在,我发现您正在尝试在card::card(const int newRank = -1, const char* newLocation = "location")
中默认参数值。这是不正确的,但是,您需要在方法声明中执行此操作,而不是在方法定义中。这应该可以解决你的问题。
//编辑结束
为了给您提供一些好的提示,您可以遵循一些改进代码的良好做法(尽管这与您的代码的正确性无关):首先,了解initialization list以及如何他们被使用。其次 - 即使程序员与程序员和项目之间存在差异 - 使用带有起始大写字母(上骆驼案例)的名称。