我有一个关于在c ++中使用类的问题。我必须说我是初学者。例如,我有这个类:
class student {
private:
char* name;
public:
int nrcrt;
student() {
name = new char[7];
name = "Anonim";
nrcrt = 0;
}
student(char* n, int n) {
this->name = new char[7];
strcpy(name, n);
nrcrt = nr;
}
~student() {
delete [] name;
}
char* get_name() {
return this->name;
}
}
void main() {
student group[3];
group[0] = student("Ana", 1);
group[1] = student("Alex", 2);
group[2] = student("Liam", 5);
for (i=0; i<3; i++) {
if (group.nrcrt[i] != 0)
cout << group[i].get_name() << Endl;
}
}
我的问题是为什么它会显示不同的字符?
答案 0 :(得分:0)
首先你的代码无效。
3.cpp:40:18: error: request for member ‘nrcrt’ in ‘group’, which is of non-class type ‘student [3]’
if(group.nrcrt[i]!=0)
我也没有申报。请做出适当的改变。
group.nrcrt[i]
应更改为:
group[i].nrcrt
答案 1 :(得分:0)
Student group[3];
接下来重要的是在那种情况下你不需要其余的构造函数。
group[0]=student("Ana",1);
group[1]=student("Alex",2);
group[2]=student("Liam",5);
记得包括;在课堂宣言结束时。在整个交互过程中将所有语句和表达式放在同一个循环中。这是我发现的错误和修复它们。可能还有更多。
class Student
{
private:
char* name;
public:
int nrcrt;
Student()
{
name=new char[7];
strcpy(name, "Anonim");
nrcrt=0;
}
Student( char* n, int n)
{
this->name=new char[7];
strcpy(name, n);
nrcrt=nr;
}
~Student()
{
delete [] name;
}
char* get_name()
{
return this->name;
}
};
int main()
{
Student group[3];
for(int i=0;i<3;i++)
{
if(group.nrcrt[i]!=0)
cout<<group[i].get_name()<<endl;
}
return 0;
}
答案 2 :(得分:0)
创建数组时,使用默认构造函数
分配给元素时,将调用析构函数,删除name
默认构造函数将文字分配给name
,删除该内存具有未定义的行为。
在默认构造函数中,替换
name = "Anonim";
带
strcpy(name, "Anonim");
您的编译器应该已经警告过您的任务 如果没有,请提高编译器的警告级别 如果是这样,请开始收听编译器的警告。