Как создать экземпляр потока, если вы объявляете его членом класса?

c++ iostream

9535 просмотра

2 ответа

Какой конструктор вы можете использовать для создания экземпляра потока, если вы объявите его как член класса?

#include <fstream>
class Foo {
Foo();
// not allowed
std::fstream myFile("\\temp\\foo.txt", fstream::in | fstream::out | fstream::trunc);

// allowed
std::fstream myFile;
}

// constructor
Foo::Foo() {
// what form of myFile("\\temp\\foo.txt", fstream::in | fstream::out | fstream::trunc)  can I use here?


myFile = ???
}
Автор: likejudo Источник Размещён: 12.11.2019 09:50

Ответы (2)


7 плюса

Решение

В новой версии C ++ (C ++ 11) приведенный выше код прекрасно работает; инициализации разрешены внутри тела класса.

В C ++ 03 (предыдущая версия C ++) вы можете инициализировать fstream, используя список инициализатора члена следующим образом:

Foo::Foo() : myFile("file-name", otherArguments) {
    // other initialization
}

Синтетически это делается путем добавления двоеточия после имени конструктора, но перед фигурной скобкой, затем перечисления имени поля, которое вы хотите инициализировать (здесь myFile), и затем в скобках аргументов, которые вы хотите использовать для его инициализации. Это приведет myFileк правильной инициализации.

Надеюсь это поможет!

Автор: templatetypedef Размещён: 24.01.2012 09:10

5 плюса

Другой вариант:

Foo::Foo () {
    myFile.open("\\temp\\foo.txt", fstream::in | fstream::out | fstream::trunc);

    if(!myFile.is_open()) {
        printf("myFile failed to open!");
    }

    //other initialization
}
Автор: yurbles Размещён: 24.01.2012 10:08
Вопросы из категории :
32x32