2012-02-20 2 views
0
Undefined symbols for architecture x86_64: 
    "KeyValue::KeyValue()", referenced from: 
     Mapper::map() in Mapper.o 
    "KeyValueList::KeyValueList()", referenced from: 
     QuickSort::group() in QuickSort.o 
    "KeyValueList::~KeyValueList()", referenced from: 
     QuickSort::group() in QuickSort.o 
     std::vector<KeyValueList, std::allocator<KeyValueList> >::_M_insert_aux(__gnu_cxx::__normal_iterator<KeyValueList*, std::vector<KeyValueList, std::allocator<KeyValueList> > >, KeyValueList const&) in QuickSort.o 
     void std::_Destroy<KeyValueList>(KeyValueList*) in QuickSort.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

내 코드에 다른 오류가 발생, 내가 한 경고가 말을했다 없다 : 나는 생각하지 않는다컴파일러 오류 누군가가 그것을 이해하는 데 도움이 될 수있는 적이 본 적이 없습니까?

Implicit conversion loses integer precision: 'unsigned long' to 'int' 

가 ... 누군가가 나이 오류가 무엇인지 이해하는 데 도움이 할 수있는 연결 오류가 발생합니다 및 어떻게 일어 났을까요?

필요한 경우 일부 코드를 제공 할 수 있습니다.

+0

클래스 'KeyValue'의 정의를 보여주십시오. 이 증후군의 원인이 될 수있는 몇 가지 흔한 실수가 있지만, 코드를 보지 않고 어떤 코드인지는 알 수 없습니다. – zwol

+2

이들은 컴파일러 오류가 아닌 _linker_ 오류입니다. – ildjarn

+0

아마도 이러한 기능을 구현하는 것을 잊었을 것입니다. 아마도 해당 .obj를 실행 파일에 링크하는 것을 잊었을 것입니다. 어쩌면 다른 것. 알아 내려면 A) 고치기 전까지 또는 B) 여기에 복사하여 붙여 넣을 수있는 프로그램이 충분할 때까지 프로그램의 비트를 삭제하십시오. http://sscce.org/를 참조하십시오. –

답변

1

존재하지 않는 코드에 연결하려고합니다. 물론 x86_64에서는 그렇지 않습니다. KeyValue()은 어디에 정의되어 있습니까? - 그 링크.

Mapper 및 Quicksort에 KeyValue의 헤더 파일을 포함 시켰지만 처리 할 컴파일러 소스를 추가하지 않은 것 같습니다.

+0

그래, 그게 ... 내 생성자와 소멸자를 정의하는 걸 잊어 버렸어. 바보, 롤. 전에 링커 오류를 본 적이 없기 때문에 혼란 스러웠습니다. – OghmaOsiris

+0

링크에 대한 오류 메시지는 일반적으로 컴파일러 오류 메시지보다 훨씬 상세하지 않으므로 오류 메시지를 조사하는 데 시간을 할애 할 가치가 있습니다. – koan

관련 문제