使用cin>>和cout<<填充类C ++的字段

时间:2017-03-15 22:12:41

标签: c++ class operator-overloading

我的MyClass.h课程定义如下:

#ifndef MyClass_h
#define MyClass_h

#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;

class MyClass {
public:
    string input
    void ReadFrom(istream &is);
    void WriteTo(ostream &os) const;
};
#endif /* MyClass_h */

MyClass.cpp看起来像这样:

#include <stdio.h>
#include <string>
#include <iostream>
#include "MyClass.h"

using namespace std;

void MyClass::ReadFrom(istream &is) {
    // put data into member 'input'
}

void MyClass::WriteTo(ostream &os) const {
    // output data in member 'input'
}

istream& operator >>(istream &is, MyClass &cls) {
    cls.ReadFrom(is);
    return is;
}

ostream& operator <<(ostream &os, const MyClass &cls) {
    cls.WriteTo(os);
    return os;
}

main.cpp看起来像这样:

#include <stdio.h>
#include <string>
#include <iostream>
#include "MyClass.h"

using namespace std;

int main(int argc, const char * argv[]) {
   MyClass c;
   std::cout << "Enter some input" << endl;
   std::cin >> c;
   return 0;
}

我要完成的是覆盖>><<运算符,以便std::cin可以简单地将数据读入类成员,然后{{1}可以吐出这些成员中的所有数据。

我不想使用std::cout函数。

目前,我在friend行周围收到错误消息:

  

二进制表达式的无效操作数('istream'(又名'basic_istream&lt; char&gt;')和'MyClass')

1 个答案:

答案 0 :(得分:3)

编译器无法在matplotlib.path转换单元中看到运算符重载,因为在该文件中找不到重载,也没有在任何main.cpp文件中找到重载。在#include声明之后,您需要在MyClass.h文件中声明两个重载:

MyClass.h:

MyClass

您可以将定义保留在#ifndef MyClass_h #define MyClass_h #include <iostream> #include <stdio.h> #include <string> using namespace std; class MyClass { public: string input void ReadFrom(istream &is); void WriteTo(ostream &os) const; }; istream& operator >>(istream &is, MyClass &cls); ostream& operator <<(ostream &os, const MyClass &cls); #endif /* MyClass_h */ 文件中。