cout具有类的功能

时间:2015-02-11 19:55:15

标签: c++ class

我刚参加了班级课程&#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;
}

4 个答案:

答案 0 :(得分:3)

您需要:

  1. 更改您的print()函数,以返回您希望std::string写入main()的{​​{1}}值:

    cout

    #include <sstream>
    
    string print(int id){
        ostringstream oss;
        oss << name << id;
        return oss.str();
    }
    
  2. cout << stu1.print(x); 返回print()并直接写入void,然后从main()中移除cout

    cout

    void print(int id){
        cout << name << id;
    }
    
  3. 话虽如此,您的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();