LNK2005 Ошибка при попытке переопределить глобальные новые и удалить операторы - PullRequest
2 голосов
/ 11 января 2010

У меня есть проект C ++, который без проблем компилируется и связывается. Недавно мы добавили код для переопределения глобальных операторов new и delete, и теперь проекту не удается связать с ошибкой:

ошибка LNK2005: «оператор void * __cdecl new (unsigned int)» (?? 2 @ YAPAXI @ Z) уже определен.

Мне известно о MS KB148652, и я сделал то, что он предложил - я поместил Nafxcwd.lib и Libcmtd.lib в списки дополнительных зависимостей и игнорирую определенные библиотеки. На самом деле они уже были там, так как мне пришлось добавить их, чтобы устранить другие предыдущие ошибки компоновщика. Я убедился, что первое включение во все файлы .cpp - это stdafx.h (как предполагает KB148652), но, похоже, ничего не работает.

Если кто-то может предложить другой подход или какое-то направление, которое я не пробовал, я был бы рад узнать об этом. Заранее спасибо.

Ответы [ 2 ]

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

Очистите весь проект и попробуйте восстановить его с нуля.

0 голосов
/ 24 февраля 2010

в c ++ перегруженные операторы не наследуются через иерархию классов, поэтому попробуйте полностью переопределить отдельную копию new и удалить в каждом производном классе, не обращаясь к определению базового класса, используя base_class :: operator new,
я надеюсь, что смогу помочь вам

...