Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, уважаемые!
А>Возникла такая проблема. Почему-то при использовании экземпляра класса файлового потока ofstream в качестве свойства своего класса, проект не компbлируется.
А>Пример кода:
А>А>#include <Windows.h>
А>#include <iostream>
А>#include <fstream>
А>using namespace std;
А>class Log
А>{
А>private:
А>ofstream out;
А>public:
А>Log(): out("log.txt")
А>{}
А>Log operator<<(int m)
А>{
А>out << m;
А>return *this;
А>}
А>};
А>
А>Пользуюсь средой MSVS 2005.
А>Выдает следующую ошибку:
А>error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'
А>Ошибка в том месте, где объявлены как закрытые конструктор копий и оператор присваивания класса basic_ios.
А>Их реализация по понятным причинам отсутствует.
А>Причем, что странно, на шестой студии (MSVS 6.0) данный код без проблем компилируется.
А>Что еще более странно, при небольшом видоизменении класса Log, компилятор MSVS 2005 перестает ругаться:
А>А>class Log
А>{
А>private:
А>ofstream *pout;
А>public:
А>Log(): pout(NULL)
А>{
А>pout = new ofstream("log.txt");
А>}
А>~Log()
А>{
А>delete pout;
А>}
А>Log operator<<(int m)
А>{
А>*pout << m;
А>return *this;
А>}
А>};
А>
Я думаю, причина в том, что объекты-потоки нельзя присваивать... В первом случае у тебя объект-поток, а во втором — указатель на него... Поэтому против указателя система ничего не имеет...