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

Using cin >> and cout << to populate fields of a class C++

本文关键字:lt gt 字段 C++ cout cin 使用 填充      更新时间:2023-10-16

我在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可以简单地将数据读入类成员,然后std::cout可以吐出这些成员中的所有数据。

我不想使用friend函数。

现在,我在std::cin >> c;行周围收到一个错误,上面写着:

二进制表达式的操作数无效("istream"(又名"basic_istream"(和"MyClass"(

编译器

无法在main.cpp翻译单元中看到运算符重载,因为重载在该文件中找不到,在任何#include文件中都找不到。 您需要在MyClass.h文件中声明两个重载,在MyClass声明之后:

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;
};
istream& operator >>(istream &is, MyClass &cls);    
ostream& operator <<(ostream &os, const MyClass &cls);
#endif /* MyClass_h */

您可以将定义保留在MyClass.cpp文件中