菜鸟求教

kakaliuuuu 2010-06-18 10:37:07
定义一个“大富翁”游戏角色类CRole,描述角色的私有数据成员为
姓名(char *pName)、金钱(iCash)、存款(iSavings)、得意时口头禅(char *pGoodWords)、沮丧时口头禅(char *pBadWords)、游戏的角色数目( iRoleNum)、游戏角色平均资产(iMoney)。
定义相应的成员函数来设置和读取这些私有成员(游戏角色数目和平均资产只能通过计算得到,不能直接设置)。
并为这个类定义构造函数
(每次构造成功,显示[对象姓名+“角色进入”])、
拷贝构造函数和析构函数(每次析构显示[对象姓名+“角色退出”]。
定义成员函数Speak()输出口头禅(根据资产数超过还是低于平均资产而定);
在main函数里用该类定义一个对象数组,包括以下5个对象信息(姓名、口头禅)。
孙小美 好的开始是成功的一半! 还给人家啦
钱夫人 你的是我的,我的还是我的! 老娘跟你没完!
沙隆巴斯 阿拉真主,我赞美你! 人生不如意十有八九
再加两个角色A,B及其口头禅(自定)

再通过cin依次输入三个角色的现金和存款(要求每个输入前有输入说明提示)。
输入完后直接调用speak观看输出结果。
输出结果必须按照资产由高到低的角色顺序输出.


我按照这个要求写了以下一段代码:


class CRole
{
private:
char *pBadWords;
char *pGoodWords;
char *pName;
float iCash;
float iSavings;
static int iRoleNum;
static float iMoney;
public:
CRole(char *pName,char *pGoodWords,char *pBadWords);
~CRole();
static float AvgMoney();
friend void Speak(CRole *r);
static void SetInfo(CRole *r);
void sort(CRole *r);
void SetName(char *pName,char *pGoodWords,char *pBadWords);
};
//CRole.h
#include "CRole.h"
#include <iostream>
#include <string>
using namespace std;
int CRole::iRoleNum = 0;
float CRole::iMoney = 0;
CRole::CRole(char *pName,char *pGoodWords,char *pBadWords)
{
pName = new char[20];
pGoodWords = new char[30];
pBadWords = new char[30];
strcpy(this->pName,pName);
strcpy(this->pGoodWords,pGoodWords);
strcpy(this->pBadWords,pBadWords);
iRoleNum++;
cout<<pName<<"加入游戏"<<endl;
cout<<"当前有"<<iRoleNum<<"位玩家";
}
CRole::~CRole()
{
delete []pName;
delete []pGoodWords;
delete []pBadWords;
iRoleNum--;
cout<<pName<<"退出游戏"<<endl;
cout<<"当前有"<<iRoleNum<<"位玩家";
}
void CRole::SetInfo(CRole *r)
{
for(int i = 0;i<5;i++)
{
cout<<"请输入"<<r[i].pName<<"的现金:";
cin>>r[i].iCash;
cout<<"请输入"<<r[i].pName<<"的存款:";
cin>>r[i].iSavings;
iMoney = r[i].iCash + r[i].iSavings;
}
}
float CRole::AvgMoney()
{
float avgMoney = 0;
avgMoney = iMoney/5;
return avgMoney;
}
void CRole::SetName(char *pName,char *pGoodWords,char *pBadWords)
{
strcpy(this->pName,pName);
strcpy(this->pGoodWords,pGoodWords);
strcpy(this->pBadWords,pBadWords);
}
void Speak(CRole *r)
{
int i = 0;
CRole temp("a","a","a");
for(int pass = 0;pass<5;pass++)
{
for(int j = 0;j<5-pass;j++)
{
if((r[i].iCash + r[i].iSavings)<(r[i+1].iCash + r[i+1].iSavings))
{
temp = r[i];
r[i] = r[i+1];
r[i+1] = temp;
}
}
}
for(int i = 0;i<5;i++)
{
if((r[i].iCash+r[i].iSavings)<CRole::AvgMoney())
{
cout<<r[i].pName<<" "<<r[i].pBadWords;
}
else
{
cout<<r[i].pName<<" "<<r[i].pGoodWords;
}
}
}
void main()
{
CRole s[5];
s[0].SetName("孙小美","好的开始是成功的一半!","还给人家啦");
s[1].SetName("钱夫人","你的是我的,我的还是我的!","老娘跟你没完!");
s[2].SetName("沙隆巴斯","阿拉真主,我赞美你!","人生不如意十有八九");
s[3].SetName("富二代","我的车速永远70码","撞死你照样无罪释放");
s[4].SetName("刘云超","教训你们这班虚伪的家伙","人家不是GAY啦");
CRole::SetInfo(s);
Speak(s);
}


最后调试的时候出现了: error C2512: “CRole”: 没有合适的默认构造函数可用这个错误
请问下高手们这是为什么啊,要怎么样解决,谢谢了!!!!
...全文
93 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mstlq 2010-06-18
  • 打赏
  • 举报
回复
public:
CRole(char *pName,char *pGoodWords,char *pBadWords);
改成
public:
CRole(char *pName="",char *pGoodWords="",char *pBadWords="");

欲知详情,请google“默认构造函数”

另外,请楼主注意及时结帖
xllclever 2010-06-18
  • 打赏
  • 举报
回复
定义一个无参数列表的构造函数。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧