Ошибка связи: неразрешенный оператор << для std :: basic_ostream с CStringT - PullRequest
3 голосов
/ 25 января 2010

Я просто реорганизовал некоторые библиотеки моего проекта Visual C ++ (7.1) и получил проблему с компоновщиком, который не могу разрешить.

Проект связывает MFC, а также стандартные библиотеки Windows, все MBCS

Где-то есть что-то вроде:

std :: stringstream sstr; sstr << m_MyCStringVar << std :: endl; </p>

(эта строка, как и некоторые другие, нуждается в << для basic_stream и CString) </p>

Все было хорошо, пока я не слил 2 другие библиотеки в 1 (просто перемещая код / ​​файлы из a в b без особых изменений)

Внезапно все мои exe-файлы выдают ошибку компоновщика:

BasicFunctionsD.lib (CAccess.obj): ошибка LNK2019: неразрешенный внешний символ «класс std :: basic_ostream> & оператор __cdecl << (класс std :: basic_ostream> &, класс ATL :: CStringT>> const &)» (?? 6 @ YAAAV? $ basic_ostream @ DU? $ char_traits @ D @ станд @@@ станд @@ AAV01 @ ABV? $ CStringT @ DV? $ StrTraitMFC_DLL @ DV? $ ChTraitsCRT @ D @ ATL @@@@@ АТЛ @@@ Z) упоминается в функции "protected: void __thiscall CAccessor :: CreateCategory (int, char const *, char const *)" (? CreateCategory @ CAccessor @@ IAEXHPBD0 @ Z) * ​​1015 *

(код выше не был затронут слиянием библиотеки, по крайней мере, напрямую)

Насколько я могу распознать, оператор << для базового ostream и CString не найден. </p>

Может быть, библиотека, содержащая версии MFC basic_ostream, не найдена?

Но я понятия не имею, как это исправить или даже с чего начать поиск настоящей проблемы.

Любые подсказки были бы хороши

Ответы [ 2 ]

3 голосов
/ 25 января 2010

Arg ... * *

Простая причина: нет оператора std :: ostream с CString ... это был мой собственный код, и я просто не запомнил ... :( Во время очистки функция ушла в пространство имен и потерялась

D'ой! * * 1005

namesspace StupidcleanupIshouldNotHavedone { std :: ostream & operator << (std :: ostream & s, const CString & str) { s << (LPCTSTR) str; возврат с; } } </p>

1 голос
/ 25 января 2010

Я, вероятно, ошибаюсь, но IIRC у меня возникла проблема с неразрешенными ссылками. Решение было готово ...... #include <string>. Оказывается, одна из строк, определенных в заголовках, и я смог использовать строку нормально и без проблем компилировать. Однако статической реализации не было, так как я забыл заголовок, так что, возможно, ваш отсутствующий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...