C++ C+中的构造函数+;班
对于这个学校项目,我们需要一个card类,它包含int-rank、char-color和两个char*到C样式的字符串(用于操作和位置)。我们需要包含以下内容的类: 1) 卡片默认构造函数(默认等级和位置) 2) 卡片参数化构造函数(所有数据成员作为参数) 3) 卡片副本构造函数 我不知道如何把这些都包括在课堂上。我不断地遇到编译器错误,比如“候选者期望参数,给定”,候选者是:“然后列出我所有的构造函数 我不知道如何在我的类中声明它们,如何在它们的实现中命名它们,以及如何调用它们 现在我有:C++ C+中的构造函数+;班,c++,class,constructor,arguments,default,C++,Class,Constructor,Arguments,Default,对于这个学校项目,我们需要一个card类,它包含int-rank、char-color和两个char*到C样式的字符串(用于操作和位置)。我们需要包含以下内容的类: 1) 卡片默认构造函数(默认等级和位置) 2) 卡片参数化构造函数(所有数据成员作为参数) 3) 卡片副本构造函数 我不知道如何把这些都包括在课堂上。我不断地遇到编译器错误,比如“候选者期望参数,给定”,候选者是:“然后列出我所有的构造函数 我不知道如何在我的类中声明它们,如何在它们的实现中命名它们,以及如何调用它们 现在我有: c
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;
及
我知道我需要告诉编译器哪个构造函数是哪个。但是怎么做呢?问题是你实际上没有默认构造函数。类的默认构造函数是这样的,它没有传入任何参数,例如,它有空的参数列表,所以它的签名看起来像
card()
//编辑:
现在我看到您试图在card::card(const int newRank=-1,const char*newLocation=“location”)
中默认参数值。这是不正确的。但是,您需要在方法声明的头中执行此操作,而不是在方法定义中。这应该可以解决您的问题
//编辑结束
为了给您一些好的提示,一般来说,您可以遵循一些好的实践来改进代码(尽管这与代码的正确性无关):首先,了解它们的用途和用法。第二,尽管不同的程序员和项目使用不同的名称,但使用以大写字母开头的名称(大写)对于您的类。问题是您实际上没有默认构造函数。类的默认构造函数是这样的:它没有传入任何参数,例如,它有空的参数列表,因此它的签名看起来像
card()
//编辑:
现在我看到您试图在card::card(const int newRank=-1,const char*newLocation=“location”)
中默认参数值。这是不正确的。但是,您需要在方法声明的头中执行此操作,而不是在方法定义中。这应该可以解决您的问题
//编辑结束
为了给您一些好的提示,一般来说,您可以遵循一些好的实践来改进代码(尽管这与代码的正确性无关):首先,了解它们的用途和用法。第二,尽管不同的程序员和项目使用不同的名称,但使用以大写字母开头的名称(大写)对于您的类。问题是您实际上没有默认构造函数。类的默认构造函数是这样的:它没有传入任何参数,例如,它有空的参数列表,因此它的签名看起来像
card()
//编辑:
现在我看到您试图在card::card(const int newRank=-1,const char*newLocation=“location”)
中默认参数值。这是不正确的。但是,您需要在方法声明的头中执行此操作,而不是在方法定义中。这应该可以解决您的问题
//编辑结束
为了给您一些好的提示,一般来说,您可以遵循一些好的实践来改进代码(尽管这与代码的正确性无关):首先,了解它们的用途和用法。第二,尽管不同的程序员和项目使用不同的名称,但使用以大写字母开头的名称(大写)对于您的类。问题是您实际上没有默认构造函数。类的默认构造函数是这样的:它没有传入任何参数,例如,它有空的参数列表,因此它的签名看起来像
card()
//编辑:
现在我看到您试图在card::card(const int newRank=-1,const char*newLocation=“location”)
中默认参数值。这是不正确的。但是,您需要在方法声明的头中执行此操作,而不是在方法定义中。这应该可以解决您的问题
//编辑结束
为了给您一些好的提示,一般来说,您可以遵循一些好的实践来改进代码(尽管这与代码的正确性无关):首先,了解它们的用途和用法。第二,尽管不同的程序员和项目使用不同的名称,但使用以大写字母开头的名称(大写)对于您的类。您还没有实现默认构造函数。另外,不要在实现中为参数提供默认参数;只在类声明中提供参数。@WhozCraig-这使所有错误都消失了。谢谢。我不确定所有语法。您还没有实现默认构造函数。另外,不要提供实现中参数的默认参数;仅在类声明中提供。@WhozCraig-这消除了所有错误。谢谢。我不确定所有语法。您尚未实现默认构造函数。此外,不要在实现中为参数提供默认参数;在类decl中提供aration only。@WhozCraig-这消除了所有错误。谢谢。我不确定所有语法。你还没有实现默认构造函数。另外,不要在实现中为参数提供默认参数;只在类声明中提供参数。@WhozCraig-这消除了所有错误。谢谢。我不确定所有的语法。
miniDeck = new card[ 4 ];