急,帮我看看这个程序为什么有错误?

李赞红 2004-12-23 09:38:02
调用show()的时候就有问题了.

#include<string.h>
#include<iostream.h>

class Student
{
private:
char* name;
int age;

public:
Student(char n,int a)
{
name = new char[strlen(n) + 1];
strcpy(name,n);

age = a;
}

Student()
{
Student("lzh",0);
}

void show()
{
cout << name << endl;
cout << age << endl;
}
};

void main()
{
Student s1;
s1.show();
}
...全文
126 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
huanghu518 2004-12-24
  • 打赏
  • 举报
回复
我想问问怎么才能在这个论坛上发啊!
我正学C,平时遇到的困难很多的。
谢谢你们能帮助
zhou_lion 2004-12-24
  • 打赏
  • 举报
回复
构造函数 参数 char n 与strcpy(name,n) 有冲突

参数改char *n 应该可以了
aleon 2004-12-23
  • 打赏
  • 举报
回复
使用参数带缺省值的构造函数可以解决你的问题
aleon 2004-12-23
  • 打赏
  • 举报
回复
在缺省构造函数里
Student()
{
Student("lzh",0);
};
构造的是那个临时对象,this->name没有被初始化,这样show()当然要出错
zhangfjj 2004-12-23
  • 打赏
  • 举报
回复
应该说是匿名对象,即构造函数是在定义类对象时,由系统自动调用的。
构造函数也可以显式调用(用得少),其结果是创建一个匿名对象,其作用域为局部作用域,
当然在上面的代码中应该给出析构函数来,你可以在析构函数中加入调试代码,来验证一下!
l_b_q 2004-12-23
  • 打赏
  • 举报
回复
和这个效果一样
Student()
{
Student Stu("lzh",0);
}
oyljerry 2004-12-23
  • 打赏
  • 举报
回复
析构函数~需要delete数组
l_b_q 2004-12-23
  • 打赏
  • 举报
回复
默认初始值只是赋给了一个临时对象,当前对象的值仍然是不可预测的,跟踪一下就知道了。
liuyunfei1010 2004-12-23
  • 打赏
  • 举报
回复
#include<string.h>
#include<iostream.h>

class Student
{
private:
char* name;
int age;

public:
Student(char *n = "lzh",int a = 0)
{
name = new char[strlen(n) + 1];
strcpy(name,n);

age = a;
}

/* Student()
{
Student("lzh",0);
}*/

void show()
{
cout << name << endl;
cout << age << endl;
}
};

void main()
{
Student s1;
s1.show();
}

//是构造函数错了,应该用默认构造函数
李赞红 2004-12-23
  • 打赏
  • 举报
回复
zhangfjj(小张(张三的张,不小的小)) :
Student()
{
Student("lzh",0);//显式调用构造函数,将创建临时对象
}

这里为什么会创建一个临时对象呢?他产生了什么影响?麻烦您说一下好吗?
李赞红 2004-12-23
  • 打赏
  • 举报
回复
zhangfjj(小张(张三的张,不小的小)) :
我原本就是按你的写法写的,就是有错误啊.
fmbs 2004-12-23
  • 打赏
  • 举报
回复
name = new char[strlen(n) + 1];????????????/
strlen(n)
而n是指针strlen(n)取的是n指向的string的长度吗?
zhangfjj 2004-12-23
  • 打赏
  • 举报
回复
小改了一下!
#include<string.h>
#include<iostream.h>

class Student
{
private:
char* name;
int age;

public:
Student(char* n,int a)
{
set(n,a);
}

Student()
{

}
void set(char * n,int a)
{
name = new char[strlen(n) + 1];
strcpy(name,n);

age = a;
}

void show()
{
cout << name << endl;
cout << age << endl;
}
};

void main()
{
Student s1;
s1.set("lzh",0);
s1.show();
}
zhangfjj 2004-12-23
  • 打赏
  • 举报
回复
重新写吧



#include<string.h>
#include<iostream.h>

class Student
{
private:
char* name;
int age;

public:
Student(char* n,int a)//改为指针
{
name = new char[strlen(n) + 1];
strcpy(name,n);

age = a;
}

Student()
{
Student("lzh",0);//显式调用构造函数,将创建临时对象
}

void show()
{
cout << name << endl;
cout << age << endl;
}
};

void main()
{
Student s1;
s1.show();
}

/*并没有与之匹配的构造函数Student("lzh",0);
其原型是Student(char *,int);
*/
李赞红 2004-12-23
  • 打赏
  • 举报
回复
刚才错了,是下面的程序有错误.

#include<string.h>
#include<iostream.h>

class Student
{
private:
char* name;
int age;

public:
Student(char *n,int a)
{
name = new char[strlen(n) + 1];
strcpy(name,n);

age = a;
}

Student()
{
Student("lzh",0);
}

void show()
{
cout << name << endl;
cout << age << endl;
}
};

void main()
{
Student s1;
s1.show();
}
zhangfjj 2004-12-23
  • 打赏
  • 举报
回复
你的构造函数有问题

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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