2014-11-07 2 views
0

Я хочу сделать обертку Filer класс для работы с библиотекой fstream.Как передать класс/объект через конструктор в C++

Таким образом, я хочу, чтобы передать экземпляр fstream класса через конструктор моего собственного класса Filer, который привел к этому коду:

Filer::Filer(fstream fileObject) 
{ 
    fileObject this->fileObj; 
}; 

Хотя, когда я скомпилировать его, выдается ошибка, что:

1>Filer.cpp(10): error C2143: syntax error : missing ';' before 'this' 

Хотя, когда я делаю это:

Filer::Filer(fstream fileObject) 
{ 
    this->fileObj = fileObject; 
}; 

Он бросает эти ошибки W он жалуется, что fstream не может быть назначен таким образом;

error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::fstream' (or there is no acceptable conversion) 

Как я должен затем сделать мой конструктор принимает объект типа fstream?

ответ

5

У вас там нет C++. Попробуйте это:

Filer::Filer(fstream& fileObject) 
    : fileObj(fileObject) 
{ 
} 

, который использует «список инициализации», чтобы сохранить ссылку на fileObject, который должен быть объявлен в качестве члена класса. И вы должны использовать ссылки, потому что потоки не копируются.

+0

Ну, могу я спросить вас, когда в файле заголовка мы указываем класс, какой тип должен быть назначен 'fileObj'? Я имею в виду, как мы должны объявлять 'fileObj'? 'string fileObj;' на самом деле не работает –

+1

@MostafaTalebi, конечно, он не работает, 'fstream' не является' string', а 'string' не является' fstream'. Объявите 'fileObj' как ссылку на' fstream' - 'std :: fstream & fileObj'. –

+0

Ooo Я сделал это перед вашим комментарием. Большое спасибо человеку –

Смежные вопросы