문제

프로젝트에 다음 줄을 추가 할 때만 발생하는 이상한 오류 메시지가 있습니다.

std::list<CRect> myVar;

STD :: 목록 일 필요는 없으며 STD :: 벡터 또는 내가 가정하는 다른 STL 컨테이너 일 수 있습니다.

오류 메시지는 다음과 같습니다.

오류 1 오류 LNK2005 : "public : __thiscall std :: List

:: list> (void) "(?

오류 메시지에서 참조 된 저수준 라이브러리는 내가 빌드하는 프로젝트에 대해 전혀 모르고 있으며 핵심 저수준 기능 만 가지고 있으며 높은 수준의 MFC GUI를 다루지 않습니다.

코드 줄을 변경하면 링커 오류를 제거 할 수 있습니다.

std::list<CRect*> myVar;

그러나 나는 그것을 위해 그것을 해킹하고 싶지 않습니다.

또한 스택이나 힙에 변수를 만들지 여부는 여전히 동일한 오류가 발생합니다.

누구든지 이것에 대해 어떤 아이디어가 있습니까? Vista Enterprise에서 Microsoft Visual Studio 2008 SP1을 사용하고 있습니다.

편집하다: 위의 링커 오류는 std :: list <> 생성자에 대한 것입니다. 또한 파괴자, _nextNode 및 명확한 함수에 대한 오류도 얻습니다.

편집하다: 프로젝트의 다른 파일에서는 std :: vector가 연결되지 않으며 다른 파일에서는 std :: 목록 일 수 있습니다. 왜 일부 컨테이너가 작동하는지 알아낼 수없고 일부는 그렇지 않습니다. MFC 연결은 두 라이브러리에서 정적입니다. 낮은 레벨 라이브러리에는 std :: 목록에서 상속되는 1 개의 클래스가 있습니다.

편집하다: 낮은 레벨 라이브러리에는 Crect에서 상속되는 클래스가 없지만 STL을 사용합니다.

도움이 되었습니까?

해결책 2

나는 최근에 우리 프로젝트 에서이 오류를 다시 우연히 발견했으며 지난번과 같은 해킹으로 패치하는 것과 비교하여 더 철저한 조사를하기로 결정했습니다 (Carray의 Swap STD :: List). 저수준 라이브러리 중 하나가 STD :: List (예 :

class LIB_EXPORT CRectList : public std::list<CRect>
{
};

이것은 나쁜 연습 일뿐 만 아니라 기본 응용 프로그램에서 링커 오류의 원인이기도합니다. CRECTLIST를 변경하여 STD :: 목록에서 상속받지 않고 목록을 마무리하고 오류가 사라졌습니다.

다른 팁

링커 설정을보고 있어야하지만 즉시 말할 수는 없습니다. STL 인스턴스화가 여러 파일에서 수행되는 것은 정상입니다. 링커는 하나를 선택해야합니다. 그들은 모두 동일합니다 (당신을 가정합니다 하다 일관된 컴파일러 설정이 있습니다).

이것은 정확한 증상처럼 들리지 않지만 메인 프로젝트와 포함 된 모든 라이브러리가 "C ++ : Code Generation"에서 동일한 "런타임 라이브러리"설정을 사용하는지 확인해야합니다. 이러한 설정을 혼합하면 런타임 라이브러리 링크 오류가 발생할 수 있습니다. (당신의 경우에 나를 혼란스럽게하는 것은 코드를 변경하여 사라질 수 있다는 것입니다. 그러나 아직 확인하지 않았는지 확인할 가치가 있습니다.)

Semelowlevellibrary.lib는 Crect라는 클래스를 포함하거나 사용합니까? STL을 사용합니까?

파일이 두 개의 별도 코드 모듈로 컴파일 될 수있는 헤더에 포함되어 있습니까?

오늘 또 다른 임의의 가능성이 내 머리에 튀어 나왔습니다. 현재 DLL과 저 레벨 라이브러리가 MFC의 두 가지 버전을 참조 할 수 있습니까? 장거리 슛.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top