Я столкнулся с очень неприятной ошибкой компоновщика, когда начал использовать обсуждаемую отладку здесь.
Мне удалось сузить его до конструкции new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
. Как только эта перегрузка нового оператора была использована, я получаю error LNK2005: "void __cdecl operator delete(void *,int,char const *,int)" (??3@YAXPEAXHPEBDH@Z) already defined in ...
Если я исключу этот объектный файл из процесса связывания, он просто укажет мне на другой. Я не проверял это, но я совершенно уверен, что все эти объектные файлы, которые конфликтуют с MFC, используют отладочную новую версию оператора.
Это привело меня в безумную погоню за гусями, потому что, если вы погуглите эту ошибку, все доказательства скажут вам, что вы смешиваете CRT и MFC в неправильном порядке, и, конечно же, это то, что я делал.
Я просмотрел все свои объектные файлы и библиотеки с помощью dumpbin /directives
и убедился, что порядок связывания правильный, несмотря на все это, я так и не смог преодолеть эту ошибку.
Метод отладки CRT несовместим с MFC или есть объяснение этому?
Я не очень хорошо разбираюсь в MFC и пытаюсь полностью отказаться от MFC, но я бы хотел, чтобы это работало, пока это не произойдет.
_CrtSetBreakAlloc
, и это требует больше времени, но дело сделано. - person John Leidegren   schedule 02.09.2012