我刚参加了班级课程&#39;当我尝试练习并运行它时......出现了错误!显然它是正确的,但它说"no operating "<<" matches these operands"
。
另外,我尝试了cin >> stu1.add(x);
,但它恰好也是一个错误!我不能这样做?
这里是代码:
#include <iostream>
#include <string>
using namespace std;
class stu{
private:
string name;
int id;
public:
// constructor
stu(){
id=0;
}
void add(int id){
cin >> name >> id;
}
void setname(string N){
name=N;
}
void setid(int I){
id=I;
}
string getname(){
return name;
}
int getid(){
return id;
}
void print(int id){
cout << name << id;
}
};
int main(){
stu stu1;
int x;
string y;
cout << "enter name then id:";
cin >> y;
stu1.setname(y);
cin >> x;
stu1.setid(x);
cout << stu1.print(x);
//cout << "name: " << stu1.getname() << endl;
//cout << "id: " << stu1.getid() << endl;
return 0;
}
答案 0 :(得分:3)
您需要:
更改您的print()
函数,以返回您希望std::string
写入main()
的{{1}}值:
cout
#include <sstream>
string print(int id){
ostringstream oss;
oss << name << id;
return oss.str();
}
让cout << stu1.print(x);
返回print()
并直接写入void
,然后从main()中移除cout
:
cout
void print(int id){
cout << name << id;
}
话虽如此,您的stu1.print(x);
方法并不需要输入参数,因为您应该显示之前已设置的类变量print()
:
id
string print(){
ostringstream oss;
oss << name << id;
return oss.str();
}
答案 1 :(得分:1)
你可以使用ostream。首先在您的班级中添加此功能:
std::ostream& operator<<(std::ostream &os, stu const & s)
{
s.print(os);
return os;
}
然后修改打印方法:
void print(std::ostream &os) const
{
os << id << name;
}
最后你可以这样做:
cout << stu1;
答案 2 :(得分:0)
print
不返回任何内容,因此签名的void
部分。你的功能打印;它没有提供到打印的任何内容。所以...只需称呼它:
stu1.print(x);
答案 3 :(得分:0)
由于stu :: print方法的返回值为void,因此返回类型不能与cout一起使用。
你应该使用
stu1.print(x);
或
cout << stu1.getId();