C ++类中的构造函数

时间:2013-10-24 03:07:50

标签: c++ class constructor arguments default

对于这个学校项目,我们需要一个卡类,它包含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 ];

我知道我需要告诉编译器哪个构造函数是哪个。但是如何?

1 个答案:

答案 0 :(得分:3)

问题是你实际上没有默认构造函数。类的默认构造函数是这样的,即没有传入任何参数,例如,它有空参数列表,因此它的签名看起来像card()

//编辑:

现在,我发现您正在尝试在card::card(const int newRank = -1, const char* newLocation = "location")中默认参数值。这是不正确的,但是,您需要在方法声明中执行此操作,而不是在方法定义中。这应该可以解决你的问题。

//编辑结束

为了给您提供一些好的提示,您可以遵循一些改进代码的良好做法(尽管这与您的代码的正确性无关):首先,了解initialization list以及如何他们被使用。其次 - 即使程序员与程序员和项目之间存在差异 - 使用带有起始大写字母(上骆驼案例)的名称。