2012-11-06 4 views
0

참조되는 C++ 클래스가 있고 변수를 선언 할 것입니다. 나는 객관적으로 선언한다 -c :objective-c C++ 클래스의 링커 오류

cObject obj = cObject(); 
obj.myFunct("test"); 

그러나 링커 오류가있는 것 같다. 그것은 말한다 :

Undefined symbols for architecture armv7: 
    "cObject::cObject()", referenced from: 
    -[...] in xxx.o 
    ___cxxx_global_var_init in xxx.o 
"cObject::myFunct(std::__1:basic_string<char,str::__1::char_traits<char>, str::__1::allocator<char> >)", referenced from: 
    -[///] in xxx.o 
ld: symbol(s) not found for architecture armv7 
clang: error: linker command failed with exit code 1(use -v to see invocation) 

편집 : 의견에서 해결 첫 번째 오류 : 그나마 빈 생성자는 첫 번째 부분을 해결 정의합니다. 두 번째 부분은 obj.myFunct ("test") 호출을 참조합니다. 즉, 추가 (가 정의 된 경우

cObject::cObject() 
{ 
    ... 
} 

return_type cObject::myFunct(std::string arg1) 
{ 
    ... 
} 

, 당신은 그들이에서 정의하고있는 오브젝트 파일에 연결하고 있는지 확인하십시오

답변

1

당신은 클래스의 기본 생성자와 어딘가에 myFunct 함수를 정의 할 필요가 소스 파일을 Makefile/프로젝트 파일/명령 행/etc로 복사).

+0

을 통해 나를 도왔다 @

내가 @AdamRosenfield 무엇에 대한 크레딧을 복용하고 있지 않다, @EdS, 내가 가져온 헤더 파일 – Fallenreaper

+0

@Fallenreaper에 있습니다. 헤더 파일은 충분하지 않습니다. 실제로 함수에 대한 코드를 별도의 소스 파일에 작성하거나 정의를 헤더 파일에 인계해야합니다. –

+1

가져 오기 "test.h"다음 "test.cpp"라는 실제 cpp 파일을 포함하는 어떤 이유로 헤더와 cpp 파일 사이의 참조를 연결하지? 나는 그것이 자동이라고 생각했다. 어쩌면 정의가 "test.cpp"에 있음을 알기 위해 머리말에 추가해야 할 것이 있습니다. ?? – Fallenreaper

0

이것은 두 부분으로 된 답변입니다.

오류의 첫 번째 부분은 빈 생성자가 있기 때문입니다. 존재하지 않으면 비워 둘 수 없으며 오류가 발생합니다. 이 문제를 해결하기 위해 생성자를 제거했으며 컴파일러는 기본적으로 생성자를 만듭니다.

질문의 다른 부분은 컴파일 문제입니다. 무슨 뜻이야? 내 말은,이 경우 파일 test.h는 컴파일되지 않은 데이터와 관련이 있음을 의미합니다. 이 문제를 해결하기 위해 주석을 통해 도움을 받았지만 궁극적으로 XCode 프로젝트에 들어가서 섹션 컴파일과 관련된 작은 플러스 버튼을 클릭하여 .cpp 파일을 "소스 컴파일"섹션에 추가했습니다. 소스가 성공적으로 컴파일 된 후 프로그램이 실행되고 완벽하게 작동하며 함수를 호출하고 계획대로 클래스를 올바르게 선언합니다. H2CO3가