理解错误默认定义将是格式错误的

问题描述

#include <iostream>
#include <fstream>

void ReadFile(ifstream in);

int main() {
    ifstream in("handout.txt");
    ReadFile(in);
    return 0;

}

void ReadFile(ifstream  in){
    while(true){
        string word;
        in >> word;
        if(in.fail()) break;
        cout << word << endl;
    }
}

我是 C++ 的新手,正在尝试探索。只需从函数定义和声明 & in删除 void ReadFile(ifstream & in) 即可。我遇到了一系列我试图理解的错误

C:\Users\samru\Downloads\simple-project\simple-project\src\average.cpp:39: error: use of deleted function 'std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)'
     ReadFile(in);
                ^
c:\qt\qt5.1.1\tools\mingw48_32\lib\gcc\i686-w64-mingw32\4.8.0\include\c++\fstream:427: 'std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)' is implicitly deleted because the default deFinition would be ill-formed:
     class basic_ifstream : public basic_istream<_CharT,_Traits>
           ^
c:\qt\qt5.1.1\tools\mingw48_32\lib\gcc\i686-w64-mingw32\4.8.0\include\c++\fstream:427: error: use of deleted function 'std::basic_istream<char>::basic_istream(const std::basic_istream<char>&)'

解决方法

通过删除 &,您现在使 ReadFile 函数使用 fstream 的副本,而不是它无法执行的引用。