标题:创建对象错误
只看楼主
魔城侠客
Rank: 1
等 级:新手上路
帖 子:200
专家分:0
注 册:2006-4-4
结帖率:50%
 问题点数:0 回复次数:10 
创建对象错误
我在一个类中定义的构造函数为带缺省参数的函数,参数中无数组
在主函数中创建不带参数的对象时却提示出错,
person::person(char *i="00000",char *n="vigour",float s0=0,float s1=0,float s2=0)
{
id=new char[strlen(i)+1];
name=new char[strlen(n)+1];
strcpy(id,i);
strcpy(name,n);
score[0]=s0;
score[1]=s1;
score[2]=s2;
}
以上为带缺省参数的构造函数
person s2("0505005221","zhouyoukai",80,85,90),s1("0505005440","city",80,86,87),s4;
前面两个对象创建都正确,后面的s4对象创建时就提示出错,错误提示为:
E:\C++\schperson\main.cpp(5) : error C2512: 'person' : no appropriate default constructor available
请高手解决
且构造函数只有一个
搜索更多相关主题的帖子: 对象 float 函数 person 
2007-09-27 22:09
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
得分:0 
可不可以把这个类贴出来看看??

偶学编程,也许本身就是一个错。。。
2007-09-27 22:31
魔城侠客
Rank: 1
等 级:新手上路
帖 子:200
专家分:0
注 册:2006-4-4
得分:0 
回复:(魔城侠客)创建对象错误
#include"school.h"
#ifndef PERSON_H
#define PERSON_H
class person
{
private:
char *id;
char *name;
float score[3];
school sch;
public:
person(char *,char *,float,float,float);
person(const person &init);
person &operator=(const person &right);
~person();
void modify(char *,char *,char *);
void display();
};
#endif


#include<iostream.h>
#include<string.h>
#include"school.h"
#include"Person.h"
person::person(char *i="00000",char *n="vigour",float s0=0,float s1=0,float s2=0)
{
id=new char[strlen(i)+1];
name=new char[strlen(n)+1];
strcpy(id,i);
strcpy(name,n);
score[0]=s0;
score[1]=s1;
score[2]=s2;
}
person::person(const person &init)
{
//delete []name;
//delete []id;
name=new char[strlen(init.name)+1];
id=new char[strlen(init.id)+1];
strcpy(name,init.name);
strcpy(id,init.id);
score[0]=init.score[0];
score[1]=init.score[1];
score[2]=init.score[2];
}
/*person &person::operator =(const person &right)
{
if(&right!=this)
{
delete []name;
delete []id;
name=new char[strlen(right.name)+1];
id=new char[strlen(right.id)+1];
strcpy(name,right.name);
strcpy(id,right.id);
}
return *this;
}*/
void person::modify(char *n,char *c,char *s)
{
delete []name;
name=new char[strlen(n)+1];
strcpy(name,n);
sch.modify(c,s);
}
void person::display()
{
cout<<"学号:"<<id<<endl
<<"姓名:"<<name<<endl
<<"成绩:"<<score[0]<<","
<<score[1]<<","<<score[2]<<endl;
sch.display();
}
person::~person()
{
delete []id;
delete []name;
//delete []score;
}

West and east,home is best……
2007-09-28 11:12
魔城侠客
Rank: 1
等 级:新手上路
帖 子:200
专家分:0
注 册:2006-4-4
得分:0 
就这样 ,在定义person类的对象时,创建一个不带参数的对象就提示出错

West and east,home is best……
2007-09-28 11:13
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
得分:0 

#include<iostream>
#include<string.h>
using namespace std;
class person
{
private:
char *id;
char *name;
float score[3];
public:
person(char *i="00000",char *n="vigour",float s0=0,float s1=1,float s2=2);
person(const person &init);
void show(void); //这个没用,我测试用
~person();
};


void person::show(void) //这个我测试用
{
cout<<this->score[1]<<endl;
return;
}
person::person(char *i,char *n,float s0,float s1,float s2)
{
id=new char[strlen(i)+1];
name=new char[strlen(n)+1];
strcpy(id,i);
strcpy(name,n);
score[0]=s0;
score[1]=s1;
score[2]=s2;
}
person::person(const person &init)
{
//delete []name;
//delete []id;
name=new char[strlen(init.name)+1];
id=new char[strlen(init.id)+1];
strcpy(name,init.name);
strcpy(id,init.id);
score[0]=init.score[0];
score[1]=init.score[1];
score[2]=init.score[2];
}
/*person &person::operator =(const person &right)
{
if(&right!=this)
{
delete []name;
delete []id;
name=new char[strlen(right.name)+1];
id=new char[strlen(right.id)+1];
strcpy(name,right.name);
strcpy(id,right.id);
}
return *this;
}*/


person::~person()
{
delete []id;
delete []name;
//delete []score;
}
int main(void) //我测试用
{
person onePerson;
onePerson.show();
person s1("0505005440","city",80,86,87);
s1.show();
system("pause");
return 0;
}

改成这样,你看看。。。

[此贴子已经被作者于2007-9-28 12:08:42编辑过]


偶学编程,也许本身就是一个错。。。
2007-09-28 12:07
魔城侠客
Rank: 1
等 级:新手上路
帖 子:200
专家分:0
注 册:2006-4-4
得分:0 
我知道哪里错了
#include"school.h"
#ifndef PERSON_H
#define PERSON_H
class person
{
private:
char *id;
char *name;
float score[3];
school sch;
public:
person(char *,char *,float,float,float); //这里带上初值就行了,其它地方不用改
person(const person &init);
~person();
void modify(char *,char *,char *);
void display();
};
#endif

West and east,home is best……
2007-09-28 12:15
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
得分:0 
这个~~~~~~,默认变元只在声明段中,不用放在函数定义时。。。

偶学编程,也许本身就是一个错。。。
2007-09-28 14:48
魔城侠客
Rank: 1
等 级:新手上路
帖 子:200
专家分:0
注 册:2006-4-4
得分:0 
如果想定义带缺省参数的构造函数,那么一定要在定义时就带上初值
不然就会被认为是一般的带参数的构造函数
在创建对象时,调用构造函数时没有参数,所以会提示出错,我已经试过了
呵呵
person(char *i="0000",char *n="0000",float =0,float =0,float=0);
定义时就这样
你可以试下

West and east,home is best……
2007-09-28 15:36
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
得分:0 
不会啊,我试过了。。。

你用什么编译器???

偶学编程,也许本身就是一个错。。。
2007-09-28 15:46
魔城侠客
Rank: 1
等 级:新手上路
帖 子:200
专家分:0
注 册:2006-4-4
得分:0 
VC啊

West and east,home is best……
2007-09-29 15:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-173450-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023809 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved