#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)”,这两个交换下位置,会不会有什么影响?
出错的地方是: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;
}
^_^
cout<<"Constructing student"<<n<<"\n";
这句输出好像有问题.改一下.
交换位置是没有问题的,但是注意初始化的顺序不是依据初始化列表的顺序,而是按类中声明的顺序初始化.
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息