C++ 程序有错误,二进制运算符 #包括 #包括 使用名称空间std; 类别保险单 { friend fstream&operator(istream&保险单&); 私人: int policyNum; 字符串lastName; int值; 国际特价; }; fstream&运营商pol.premium; 返回; } int main(){ 出流孔的直径; outFile.open(“Policy.txt”); 保险单; 用于(整数计数=0;计数>道歉[计数]; 您正在使用的outFile

C++ 程序有错误,二进制运算符 #包括 #包括 使用名称空间std; 类别保险单 { friend fstream&operator(istream&保险单&); 私人: int policyNum; 字符串lastName; int值; 国际特价; }; fstream&运营商pol.premium; 返回; } int main(){ 出流孔的直径; outFile.open(“Policy.txt”); 保险单; 用于(整数计数=0;计数>道歉[计数]; 您正在使用的outFile,c++,C++,#include <iostream> #include <fstream> using namespace std; class InsurancePolicy { friend fstream& operator<<(fstream&, InsurancePolicy); friend istream& operator>>(istream&, InsurancePolicy&); pr

#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;

}
大体上。 但是你的操作符重载是错误的

ofstream outFile;
最好通过const传递保险策略&因为流不会改变它,而且复制用户定义的对象可能会很昂贵

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

流和运算符的
类似于您正在使用visual studio,所以您可能还需要#包括文件行抑制状态错误LNK2019未解析的外部符号“class std::basic_of stream&u cdecl操作符查看此演示,它编译得很好。您确定函数的声明和定义具有完全相同的签名吗?常规重载位于
ostream
,而不是
fstream
。请再次检查您的函数原型。
ofstream& operator<<(ofstream& out, const InsurancePolicy pol)
{
    out << pol.policyNum << " " << pol.lastName << " " << pol.value << " " << pol.premium << endl;
    return out;
}
ofstream& operator<<(ofstream& out, const InsurancePolicy& pol)