我所拥有的是使用函数连接两个文件的任务。所以我想要做的是:
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
void concatenateFiles(ifstream fileA, ifstream fileB, ofstream fileAB){
...
}
但我一直有一个我无法理解的错误。所以我改为:
...
void concatenateFiles(ifstream &fileA, ifstream &fileB, ofstream &fileAB){
...
}
它有效,但我不完全确定原因。我想这与无法访问文件有关,除非它们是通过引用传递的。也许C ++不能制作文件的副本,就像它不会通过引用传递其他变量的副本一样?这是我能得到的。这是我的第一个编程课程,所以如果你们能够尽可能简单地保持答案,那就太棒了!
谢谢,拉米。
答案 0 :(得分:2)
std::ifstream
(和其他流类)没有实现复制构造函数(这是正确的)。在C ++ 11及更高版本中,甚至通过= delete
显式禁用了编译器的默认复制构造函数。因此,您无法通过值将std::ifstream
对象传递给参数,而只能通过引用将传递给。
答案 1 :(得分:2)
你不能这样做,因为按值传递需要一个复制构造函数。但是,复制构造函数为std::basic_istream
级别basic_istream(const basic_istream& rhs) = delete;
*
delete
另一方面,通过指针或引用传递不需要复制构造函数,因此允许使用。
* 在C ++ 11中引入private
功能之前,构造函数是QWidget.setCursor (self, QCursor)
。