2015-12-12 5 views
0

У меня есть функция, которая работает на std::ifstream:Почему этот код не компилируется, если я не использую ссылку?

#include <fstream> 

void handle(std::ifstream file) { 
    // Do things 
} 

int main() { 
    std::ifstream file("x.txt"); 
    handle(file); 
} 

Этот код дает мне this ошибку.

Однако, если я делаю только один параметр ссылкой (void handle(std::ifstream& file), код компилируется без предупреждений.

Почему?

+0

Читали вы ошибку? –

+0

@KerrekSB да, по сути, я все еще читаю ошибку. – hiy

+0

Ухм, почему ты перешел? Мое редактирование сделало ваш вопрос более красивым и улучшило скорость чтения. – Downvoter

ответ

3

Параметр передан значением, для которого требуется копирование аргумента.
Однако, std::ifstream не предоставляет конструктор копирования.

От here:

ifstream (const ifstream&) = delete; 
Смежные вопросы