C++ 从c+中的文本文件读/写结构+;

C++ 从c+中的文本文件读/写结构+;,c++,visual-c++,struct,iostream,ifstream,C++,Visual C++,Struct,Iostream,Ifstream,我已经被困在同一个地方与此代码有一段时间了。最后决定在网上提问。任何帮助都将不胜感激 我已经创建了一个结构,我能够向结构添加数据,但仍然不确定是否遵循了正确的方法。主要问题在于我试图从文本文件读取数据时 我似乎在说一个错误: 错误C2678:二进制“>>”:未找到使用左手字符的运算符 “std::ifstream”类型的操作数(或没有可接受的转换) 结构: struct bankDetails //structure for bank details { int

我已经被困在同一个地方与此代码有一段时间了。最后决定在网上提问。任何帮助都将不胜感激

我已经创建了一个结构,我能够向结构添加数据,但仍然不确定是否遵循了正确的方法。主要问题在于我试图从文本文件读取数据时

我似乎在说一个错误:

错误C2678:二进制“>>”:未找到使用左手字符的运算符 “std::ifstream”类型的操作数(或没有可接受的转换)

结构:

struct bankDetails              //structure for bank details
{
    int acc_number;
    double acc_balance;
    double deposit_amt;
    double withdraw_amt;
    double interest_rate;
    //char acc_type;


};


struct CustDetails                     //structure for account details
{
    string cust_name;
    string cust_pass;
    bankDetails bankAccounts[99];
};
这是我从文件中读取的代码

CustDetails loadDataFromFile ()
{
    CustDetails x;
    ifstream  dimensionsInfile; 
    dimensionsInfile.open ("storage.txt");
    for (int i=0; i < 2; i++)                                                               
    {   // write struct data from file  
        dimensionsInfile>>
        &x.bankAccounts[i].acc_balance>>
        &x.bankAccounts[i].acc_number>>
        &x.cust_nam>>
        &x.cust_pass>>
        &x.bankAccounts[i].withdraw_amt>>
        &x.bankAccounts[i].deposit_amt>>
        &x.bankAccounts[i].interest_rate>>
        cout<<"Data loaded"<<endl;
    } 
    return x;

}
CustDetails loadDataFromFile()
{
Custx;
ifstream-dimensionsInfile;
dimensionsInfile.open(“storage.txt”);
对于(int i=0;i<2;i++)
{//从文件中写入结构数据
维度文件>>
&x、 银行账户[i].账户余额>>
&x、 银行账户[i]。账户编号>>
&x、 客户名称>>
&x、 客户通行证>>
&x、 银行账户[i]。提款金额>>
&x、 银行账户[i]。存款金额>>
&x、 银行账户[i].利率>>
请阅读。您可能需要指定您的(在纸上…),然后您可以为该规范使用一些符号

您当前的代码可能误用了和。您不想在文件上编写指针(即使技术上可以),因为再次读取它们是没有意义的(因为,而且地址不能保证从一次运行到下一次,或者从一个可执行文件到明天稍有改进的程序都保持不变)

您可能需要执行一些二进制IO(但我不建议这样做)。然后您可以使用一些二进制输入函数来读取记录(例如一些
struct
),但您不能(有意义地)对复杂类执行二进制IO,例如您的
CustDetails
,这些类包含非POD数据,例如
std::string
-s

事实上,数据通常比软件读写数据更重要。因此,采用更灵活的数据格式是有意义的(例如,您希望能够在两年内让改进版本的代码读取由旧版本代码编写的数据)

因此,通常最好使用一些文本格式(您需要对其进行定义和记录)。您可以选择一些现有的格式,例如,,。您会找到许多库来帮助您(例如JSON等)。或者您也可以使用自己的技术

你也可以考虑一些,也许和./P>一样简单。 请在前面的loadDataFromFile()中阅读有关、、.

cout<<"";
cout>运算符与cout

尽管有更好更简单的方法来做你正在做的事情。 h具有直接写入和读取类或结构对象的函数

以下是语法:

<stream name>.read((char*)<object name>,sizeof(<struct/class name>));
.read((char*),sizeof());
因此,您的loadDataFromFile可以简化为:

CustDetails loadDataFromFile ()
{
CustDetails x;
ifstream  dimensionsInfile; 
dimensionsInfile.open ("storage.txt");                                                              
     // write struct data from file  
     dimensionsInfile.read((char*) CustDetails, sizeof(x));   
     cout<<"Data loaded"<<endl;
     return x;
}
CustDetails loadDataFromFile()
{
Custx;
ifstream-dimensionsInfile;
dimensionsInfile.open(“storage.txt”);
//从文件中写入结构数据
dimensionsInfile.read((char*)CustDetails,sizeof(x));

您可能正在文件中保存指针而不是实际数据。直接的问题是,您正在通过指针将参数传递给各个字段。删除
&
:输入运算符通过引用获取值……而且,最重要的是:在读取操作后,您始终需要检查*是否成功(如果你刚刚学到了最后一点,你就大跃进了)。
<stream name>.read((char*)<object name>,sizeof(<struct/class name>));
CustDetails loadDataFromFile ()
{
CustDetails x;
ifstream  dimensionsInfile; 
dimensionsInfile.open ("storage.txt");                                                              
     // write struct data from file  
     dimensionsInfile.read((char*) CustDetails, sizeof(x));   
     cout<<"Data loaded"<<endl;
     return x;
}