C++ 使用cin>&燃气轮机;和cout<&书信电报;要填充C类的字段++;

C++ 使用cin>&燃气轮机;和cout<&书信电报;要填充C类的字段++;,c++,class,operator-overloading,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 WriteT

我在
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 */
#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;
}
#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;
}
main.cpp
如下所示:

#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 */
#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;
}
#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;
}
#包括
#包括
#包括
#包括“MyClass.h”
使用名称空间std;
int main(int argc,const char*argv[]{
MyClass c;
std::coutc;
返回0;
}
我试图完成的是重写
>
c周围遇到了一个错误行,表示:

二进制表达式('istream'(也称为'basic_istream')和'MyClass'的操作数无效


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

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 */
\ifndef MyClass\u h
#定义MyClass_h
#包括
#包括
#包括
使用名称空间std;
类MyClass{
公众:
字符串输入
无效读取(istream&is);
无效写入(ostream&os)常数;
};
istream和operator>>(istream和is、MyClass和cls);

ostream&operator IMHO通常情况下,在重载方面不要过于聪明是个好主意。也许你真正想要的是一个构造函数,它获取你从用户那里读取的数据,一旦你知道你有了构造对象所需的数据,你就可以显式调用这些数据。