Сегодня решил написать функцию в своем мини-фреймворке. Смысл этой функции вернуть объект std::fstream по заданному имени. Какого же было мое удивление, что нельзя вызвать операцию присвоения, но об этом я узнал в результате экспериментов. До них ругалось и ругалось так, что не совсем понятно что делать?
Вот код банальной функции:
#include
void Class1::Method1()
{
std::fstream file1;
std::fstream file2 = file1;
}
Ругается так:
Что на мой взгляд не совсем описательно. Было бы куда лучше, если бы авторы класса std::fstream реализовали класс:
и уж от него унаследовавшись мы получаем более вразумительные описания ошибок.
Вот код банальной функции:
#include
void Class1::Method1()
{
std::fstream file1;
std::fstream file2 = file1;
}
Ругается так:
1>c:\program files (x86)\microsoft visual studio 9.0\vc\include\fstream(934) : error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\ios(151) : see declaration of 'std::basic_ios<_Elem,_Traits>::basic_ios'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits
1> ]
1> This diagnostic occurred in the compiler generated function 'std::basic_fstream<_Elem,_Traits>::basic_fstream(const std::basic_fstream<_Elem,_Traits> &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits
1> ]
1>Generating Code...
Что на мой взгляд не совсем описательно. Было бы куда лучше, если бы авторы класса std::fstream реализовали класс:
class NonCopyable
{
protected:
NonCopyable() {};
~NonCopyable() {};
private:
NonCopyable( const NonCopyable& );
NonCopyable& operator=( const NonCopyable& );
};
и уж от него унаследовавшись мы получаем более вразумительные описания ошибок.
Комментариев нет:
Отправить комментарий