程序有错误,二元运算符

时间:2018-04-21 02:50:12

标签: c++

#include <iostream>
#include <fstream>
using namespace std;
class InsurancePolicy
{
    friend fstream&  operator<<(fstream&, InsurancePolicy);
    friend istream& operator>>(istream&, InsurancePolicy&);
private:
    int policyNum;
    string lastName;
    int value;
    int premium;
};
fstream& operator<<(fstream& out, const InsurancePolicy pol)
{
    out << pol.policyNum << " " << pol.lastName << " " << pol.value << " " << pol.premium << endl;
    return out;
}
istream& operator>>(istream& in, InsurancePolicy& pol)
{
    in >> pol.policyNum >> pol.lastName >> pol.value >> pol.premium;
    return in;
}
int main() {
    ofstream outFile;
    outFile.open("Policy.txt");
    InsurancePolicy aPolicy[10];
    for (int count = 0; count < 10; ++count)
    {   
        printf("Enter the policy number, the holder's last name, the value, and the premium.");
        cin >> aPolicy[count];
        outFile << aPolicy[count] << endl;
    }
    return 0;

}

由于以下错误,此程序无法编译: 严重 码 描述 项目 文件 线 镇压国 错误 C2679 二进制&#39;&gt;&gt;&#39;:找不到带有&#39; std :: string&#39;类型的右手操作数的运算符(或者没有可接受的转换) Project6 c:\ users \ preston freeman \ source \ repos \ jave.cpp 21

错误 C2679 二进制&#39;&lt;&lt;&#39 ;:找不到带有&#39; const std :: string&#39;类型的右手操作数的运算符(或者没有可接受的转换) Project6 c:\ users \ preston freeman \ source \ repos \ jave.cpp 16

错误 C2679 二进制&#39;&lt;&lt;&#39;:找不到运算符,该运算符采用&#39; InsurancePolicy&#39;类型的右手操作数。 (或者没有可接受的转换) Project6 c:\ users \ preston freeman \ source \ repos \ jave.cpp 32

如何解决这些错误? 谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

您正在使用

ofstream outFile;

主要。 但是你的运算符重载是

 friend fstream&  operator<<(fstream&, InsurancePolicy);

请注意,ofstream不是来自fstream,这就是为什么operator <<的{​​{1}}重载不会使fstream工作的原因ofstream }}

您只需将fstream更改为ofstream

即可
ofstream& operator<<(ofstream& out, const InsurancePolicy pol)
{
    out << pol.policyNum << " " << pol.lastName << " " << pol.value << " " << pol.premium << endl;
    return out;
}

最好通过const&amp; amp;传递InsurancePolicy因为ofstream不会改变它,并且复制用户定义的对象可能很昂贵

ofstream& operator<<(ofstream& out, const InsurancePolicy& pol)

您可能还需要#include <string>

演示: https://ideone.com/rJiw21