永发信息网

c++编译出错

答案:2  悬赏:10  手机版
解决时间 2021-07-21 08:11
  • 提问者网友:不爱我么
  • 2021-07-20 18:12

#include<iostream>
using namespace std;

class StudentID{
int value;
public:
StudentID(int id=0){
value=id;
cout<<"assigning student id"<<value<<endl;
}
};

class Student{
string name;
StudentID id;
public:
Student (string n="no name",int ssID=0):id(ssID),name(n){
cout<<"Constructing student"<<n<<"\n";
}
};

int main()
{
Student s("Randy",98);
Student t("Jenny");
}

出错信息:

1>.\ccc.cpp(18) : error C2679: 二进制“<<”: 没有找到接受“std::string”类型的右操作数的运算符(或没有可接受的转换)

请问是哪里出错了?

其中构造函数的调用“id(ssID),name(n)”,这两个交换下位置,会不会有什么影响?

最佳答案
  • 五星知识达人网友:佘樂
  • 2021-07-20 19:19

出错的地方是:cout<<"Constructing student"<<n<<"\n"; 出错提示就如你所说的一样,但是,这是一个关于


string 类的中的问题,可能是由于类型不兼容,无法初始化构造函数,在这里,关于string,我不是很清楚,修改了之后,还是有错误,但是,我们可以用简单一点的办法,直接把Student 类的数据成员 name 定义为字符指针类型,一样可以储存字符串,达到一样的功能,以下为代码:


#include<iostream>
using namespace std;
class StudentID
{
int value;
public:
StudentID(int id=0)
{
value=id;
cout<<"assigning student id "<<value<<endl;
}
};


class Student
{
char* name;
StudentID id;
public:
Student (char* n="no name",int ssID=0):name(n),id(ssID)
{
cout<<"Constructing student "<<name<<endl;
}
};


int main()
{
Student s("Randy",98);
Student t("Jenny");
return 0;
}
^_^

全部回答
  • 1楼网友:青尢
  • 2021-07-20 20:11

cout<<"Constructing student"<<n<<"\n"; 这句输出好像有问题.改一下.

交换位置是没有问题的,但是注意初始化的顺序不是依据初始化列表的顺序,而是按类中声明的顺序初始化.

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯