我正在尝试将类的成员函数的输出写入文本文件。我似乎无法让我的输出重载运算符表现出我所希望的行为。我天真地在行中使用了无法识别的参数
outStream << myClass.myMemberFunction(x1, x2, results)
因为在没有更改myMemberFunction的任何内容的情况下,我仍然找不到任何有效的方法。
这是一个例子:
proper include guards
class myClass {
public:
bool myMemberFunction( int& x1, int& x2, std::vector<int> results);
friend ostream &operator<< (ostream& out, myClass& Class)
};
然后进入
proper include files
using namespace std;
using std::vector;
bool myClass::myMemberFunction(int& x1, int& x2, vector<int> results) {
int x3;
x3 = x1 + x2;
results.push_back(x3);
return true;
};
myClass& operator<< (ostream& out, myClass& myClass) {
ofstream outStream;
outStream.open("emptyFile.txt", ios::app);
if (outStream.is_open()) {
outStream << myClass.myMemberFunction(x1, x2, results);
这里重要的一点是我想输出存储在结果向量中的值
outStream.close();
}
else throw "Unable to open file";
}
是否有任何方法可以在不更改myMemberFunction的情况下进行操作?
答案 0 :(得分:0)
ofstream& operator<< (ofstream& out, const myClass& instance) {
std::vector<int> results;
instance.myMemberFunction(x1, x2, results); // x1 and x2 need to be defined
for(int i : results) {
out << i;
}
return out;
}
您需要在其他位置创建文件等
myClass classObject; // Some instance of myClass you want to output
ofstream outStream;
outStream.open("emptyFile.txt", ios::app);
if (outStream.is_open()) {
outStream << classObject; // You can output an instance of your class now
outStream.close();
}
else throw "Unable to open file";
您还需要更新头文件中的operator<<
声明以返回ostream&
而不是myClass&
。
您确切要做的就是为您的类重载流运算符。因此,当您将其与流一起使用时,将调用此方法,并且您的实现将确定当您要输出类的实例时流将发生什么情况。因此,您不应该在此处打开文件。只需将成员函数的返回值输出到流中并返回即可。
编辑:您还必须更改成员函数的签名,以通过引用传递矢量(否则,请填充副本)。不需要通过引用传递int。