Как создать экземпляр потока, если вы объявляете его членом класса?
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:105 плюса
Другой вариант:
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
Вопросы из категории :
- c++ What are the barriers to understanding pointers and what can be done to overcome them?
- c++ Какой самый простой способ для анализа файла INI в C ++?
- c++ Когда вы должны использовать «друг» в C ++?
- c++ Как вы очищаете переменную stringstream?
- c++ В C ++ конструктор и деструктор могут быть встроенными функциями?
- c++ Что такое виртуальный базовый класс в C ++?
- c++ В чем разница между #include <filename> и #include "filename"?
- c++ Какой самый лучший бесплатный детектор утечки памяти для программы на C / C ++ и ее подключаемых библиотек DLL?
- c++ Как преобразовать std :: string в LPCWSTR в C ++ (Unicode)
- c++ Regular cast vs. static_cast vs. dynamic_cast
- iostream Можете ли вы объяснить концепцию потоков?
- iostream Как вывести двойное значение с полной точностью, используя cout?
- iostream Java IO implementation of unix/linux "tail -f"
- iostream Восстановите состояние std :: cout после манипулирования им
- iostream Выводить строки юникода в консольное приложение Windows
- iostream Почему std :: cout конвертирует летучие указатели в bool?
- iostream Кто спроектировал / спроектировал IOStreams в C ++, и будет ли он считаться хорошо спроектированным в соответствии с современными стандартами?
- iostream Байт-поток и символьный поток
- iostream Почему Cost STL iostreams не «дружественны к исключениям»?
- iostream C ++ читает от istream до новой строки (но не пробела)