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