2010-01-11 3 views
2

문제점없이 컴파일 및 링크 된 C++ 프로젝트가 있습니다. 최근에 우리는 전역 new 및 delete 연산자를 재정의하는 코드를 추가 했으므로 오류 LNK2005 : "void * __cdecl operator new (unsigned int)"(?? 2 @ YAPAXI @ Z)가 이미 정의되어 있습니다. 나는이 문제를 검색하고 제안 된 모든 것을 시도하고이 포럼을 검색하는 데 많은 시간을 보냈다. 나는 또한 MS KB148652에 대해 알고 있으며 그것이 제안한 바를 수행했다. Nafxcwd.lib와 Libcmtd.lib를 Additional Dependencies와 Ignore Specific Libary리스트에 넣었다. 실제로 이전에 다른 링커 오류를 없애기 위해 추가했기 때문에 실제로 이미있었습니다. 나는 모든 .cpp 파일의 첫 번째 include가 stdafx.h (KB148652가 암시 하듯이)이지만 아무것도 작동하지 않는 것으로 확인했다. 누군가 내가 시도하지 않은 또 다른 접근법이나 어떤 방향을 제안 할 수 있다면 그것에 대해 알고있을 것입니다. 미리 감사드립니다.LNK2005 글로벌 신규 및 삭제 연산자를 무시하려고 할 때 오류가 발생했습니다.

+1

'new'대체품이 인라인으로 정의되어 있습니까? 그게 당신 문제 일 수 있어요. – Permaquid

+0

명령 줄에서 연산자를 재정의하십시오. 그러면 다른 곳을 덮어 쓰려고하는 위치가 표시됩니다. –

+0

동일한 호출 규칙 (귀하의 경우에는 __cdecl)을 사용하여 모든 것을 빌드하십시오 - make clean이 정말로 깨끗한 지 확인하십시오 - 기본 패키지에 테스트 코드를 빌드하여 전역 새 코드를 테스트하고 대체 코드를 삭제하십시오 - 호출 규칙을 읽으십시오 – reechard

답변

1

전체 프로젝트를 지우고 처음부터 다시 만들었습니까?

+0

나를 위해 문제가 해결되었습니다. 감사! –

0

(C++) 오버로드 된 연산자는 클래스 계층 구조를 통해 상속되지 않으므로 base_class :: operator new,
i를 사용하여 기본 클래스의 정의를 참조하지 않고 각 파생 클래스에서 new 및 delete의 별도 복사본을 완전히 재정의하려고합니다. 내가 당신을 도울 수 있기를 바랍니다.

관련 문제