首页 > 解决方案 > 如何改进语法

问题描述

我写的代码似乎有几个语法错误,但代码块没有显示出来。它没有运行程序,而是打开 ios_base.h 并在那里显示一些错误。

错误信息:

error: 'std::basic_streambuf<_CharT, _Traits˛& std::basic_streambuf>_CharT, _Traits>::operator=(const std::basic_streambuf>_CharT, _Traits>&) [with_CharT = char; _Traits = std::char_traits<char>]' is private

C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\ios_base.h|789|error: 'std::ios_base& std::ios_base::operator=(const std::ios_base&)' is private| C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\basic_ios.h|66|error: within this context|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\streambuf|810|error: 'std::basic_streambuf<_CharT, _Traits>& std::basic_streambuf<_CharT, _Traits>::operator=(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char; _Traits = std::char_traits<char>]' is private| C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\fstream|72|error: within this context|
#include <iostream>
#include <stdlib.h>
#include <fstream>
using namespace std;
struct artikl()
{
    int sif;
    int kolic;
    char naz[20];
    float cena;
};
void unos()
{
    fstream myfile;
    myfile = fstream("file.bin", ios::out | ios::binary);
    artikl art_val;
    cout << "Unesite sifru: ";
    cin>>art_val.sif;
    cout << "Unesite kolicinu: ";
    cin>>art_val.kolic;
    cout << "Unesite naziv:  ";
    cin>>art_val.naz;
    cout << "Unesite cijenu:  ";
    cin>>art_val.cena;
    myfile.write((char *) &art_val, sizeof(artikl));

    myfile.close();
}
void ispis()
{
    fstream myfile;
    myfile = fstream("file.bin", ios::in | ios::binary );
    artikl art_val;
    myfile.read((char *) &art_val, sizeof(artikl));
    cout << "Naziv:  " << art_val.naz << "\n" << "Sifra: " << art_val.sif << "\n" << "Cijena: " << art_val.cena << "\n" << "Kolicina: "<< art_val.kolic << "\n";
}
int main()
{


    cout << "Izbornik: \n" << endl;

    while (true)
    {
        cout<< "1. Unos podataka: \n";
        cout<< "2. Ispis: \n";
        cout<< "9. Izlaz iz programa \n";
        int a;
        cin>>a;
        if (a == 1)
        {
            cout<<"Unesi podatke koje treba upisati u datoteku.\n";
            unos();
        }
        else if (a == 2)
        {
            cout<<"Podaci iz datoteke su: \n";
            ispis();
        }
        else if (a == 9)
        {
            exit(1);
        }
        else
            cout<<"Niste unijeli 1, 2 ili 9.";
    }

    return 0;
}

标签: c++c++11syntaxcodeblocks

解决方案


您正在创建一个默认构造fstream对象,然后立即尝试为其分配另一个新fstream对象,这是不允许的。

您应该将这两个语句组合成

fstream myfile("file.bin", ios::out | ios::binary);

推荐阅读