使用 fstream 的程序将无法编译

Posted

技术标签:

【中文标题】使用 fstream 的程序将无法编译【英文标题】:Program using fstream will not complile 【发布时间】:2018-04-21 01:41:55 【问题描述】:
#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
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, 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");
    Policy 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;
    

该程序应该接受来自键盘的值并将它们打印到文件中。但是,它给出了一堆语法错误。

严重性 代码 描述 项目 文件 线 抑制状态 错误 C2065 “outFile”:未声明的标识符 项目6 c:\users\preston freeman\source\repos\jave.cpp 39

错误 C2228 '.open' 的左边必须有类/结构/联合 项目6 c:\users\preston freeman\source\repos\jave.cpp 39

错误 C2065 “策略”:未声明的标识符 项目6 c:\users\preston freeman\source\repos\jave.cpp 40

错误 C2146 语法错误:缺少 ';'在标识符“aPolicy”之前 项目6 c:\users\preston freeman\source\repos\jave.cpp 40

错误 C2065 'aPolicy':未声明的标识符 项目6 c:\users\preston freeman\source\repos\jave.cpp 40

错误 C2065 'aPolicy':未声明的标识符 项目6 c:\users\preston freeman\source\repos\jave.cpp 44

错误 C2065 'aPolicy':未声明的标识符 项目6 c:\users\preston freeman\source\repos\jave.cpp 45

如何解决这些错误? 感谢您的宝贵时间?

【问题讨论】:

小测验:找出不同之处:outfileoutFile;还有PolicyInsurancePolicy 当你遇到这样的错误时,首先要做的是阅读错误信息。 #1:从顶部开始,阅读第一个,进行更正(您必须实际阅读您的代码才能这样做),然后再试一次。 #2。如果遇到错误,请返回#1。继续这样做,直到不再出现错误为止。 friend fstream&amp; operator&lt;&lt;(fstream&amp;, InsurancePolicy); -- 这应该是:friend fstream&amp; operator&lt;&lt;(fstream&amp;, const InsurancePolicy&amp;);。您不应该将对象按值传递给输出流函数。 【参考方案1】:

代码中有很多错别字,但主要问题是没有已知的从 fstream 到 ofstream 的转换,所以这里是正确版本的代码:

#include <iostream>
#include <fstream>
using namespace std;
class InsurancePolicy

    friend ofstream&  operator<<(ofstream&, InsurancePolicy);
    friend istream& operator>>(istream&, InsurancePolicy&);
private:
    int policyNum;
    string lastName;
    int value;
    int premium;
;
ofstream& operator<<(ofstream& out, 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]<<std::endl;
    
    return 0;


【讨论】:

以上是关于使用 fstream 的程序将无法编译的主要内容,如果未能解决你的问题,请参考以下文章

使用向量和 fstream 的代码中的 Segfault 11? C++

G++ 编译,可执行文件无法运行

fstream指针

C++ fstream 混淆

cpp程序使用fstream进行多文件输入

使用 fstream 的替代方案