2012-01-24 1 views
0

Я конвертирую большое приложение VC++ 6.0 в VS2010 и продолжаю работать с этой ошибкой для одного проектов:Советы по Bughunting для: error C2248: 'std :: basic_ios <_Elem, _Traits> :: basic_ios': не удается получить доступ к закрытому члену, объявленному в классе

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<char> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 10.0\vc\include\ios(176) : see declaration of 'std::basic_ios<_Elem,_Traits>::basic_ios' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 
1>   This diagnostic occurred in the compiler generated function 'std::basic_ofstream<_Elem,_Traits>::basic_ofstream(const std::basic_ofstream<_Elem,_Traits> &)' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 

Основываясь на тексте ошибки и другие подобные вопросы, заданные здесь, я предполагаю, что ошибка вызвана экземпляром ofstream передается непосредственно в функции, вместо того, чтобы передавать по ссылке.

Проблема, которую я имею, заключается в том, чтобы найти строку кода, в которой ofstream передан не так. Сообщение об ошибке ссылается только на заголовок fstream, включенный в VS2010, и мой проект использует ofstream повсюду в базе кода из нескольких десятков тысяч строк кода (ни один из написанных мной).

Я бы очень приветствовал любую помощь/советы/стратегии, чтобы найти этот тип ошибки компилятора. Как вы подходите к проблеме обнаружения такого рода ошибок?

+2

ли не больше диагностических под этим ошибок, которые указывают на вызывающую линию? Это обычно так. Если нет, я был бы (а) очень удивлен и (б) безнадежно ввернут. –

+1

(Хорошо сделано при определении того, что ошибка вызвана попыткой копирования объекта потока, хотя.: D) –

+0

Отпечатано имя исходного файла, которое обрабатывает компилятор, и будет до сообщений об ошибках, вызванных этим исходный файл. Разве это не ограничивает вас нарушителями? – hmjd

ответ

1

Как вы относитесь к проблеме обнаружения такого рода ошибок?

Делают grep (регулярное выражение поиска) в исходных файлов что-то вроде

\(([^,]+,)*, (std::)?of?stream [^&] 
+0

Еще лучше: 'sed - s/ofstream/ostream &/g' и исправить места, которые действительно необходимы, чтобы знать, что это« поток ». Позор, это проблема в Windows ... –

+0

Принято, как поиск 'ofstream', наконец, сделал трюк. – lowglider