Ошибка:Ошибка инициализации не-const-типа в инициализаторе конструктора?
error: invalid initialization of non-const reference of type ‘std::istream& {aka std::basic_istream<char>&}’ from an rvalue of type ‘std::ifstream {aka std::basic_ifstream<char>}’
код:
class MyClass {
private:
// why does this need to be a const reference?
std::istream &fin;
};
MyClass::MyClass(std::string &filename,const char quote, const char sep)
: fin(std::ifstream(filename)), owns_stream(true), sep(sep), quote(quote)
{
}
Это работает, если я делаю частный плавник сопзЬ член. Может кто-нибудь объяснить, почему?
хорошо, имеет смысл. У меня есть другой конструктор, который берет поток, я в основном хотел, чтобы второй конструктор был удобен в том случае, когда пользователь действительно не хотел управлять временем жизни самого потока. – Fred
@Fred: О, хорошо. Это сложно. –
Извините, я думал, что уже отмечен как ответ. Единственный способ, с помощью которого я могу разумно сделать это, - использовать внутренний указатель istream и распределить его по куче, если они передают имя файла или принимают адрес, если они передаются в поток (и do/do not delete на основе есть ли у меня собственность или нет). Есть ли другой подход, который мне не хватает? – Fred