2014-04-13 5 views
2

내가 SERVICIO 라는 이름의 클래스에 대한 간단한 생성자를 수행 할 때 컴파일러는 나에게 다음과 같은 오류 표시, 넷빈즈 C++ Mac 용에서 프로젝트를 할 노력하고있어 :정의되지 않은 기호를

"/Applications/Xcode.app/Contents/Developer/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf 
"/Applications/Xcode.app/Contents/Developer/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/GNU-MacOSX/medicos 
mkdir -p dist/Debug/GNU-MacOSX 
g++  -o dist/Debug/GNU-MacOSX/medicos build/Debug/GNU-MacOSX/agenda.o build/Debug/GNU-MacOSX/cita.o build/Debug/GNU-MacOSX/contenedor.o build/Debug/GNU-MacOSX/doctor.o build/Debug/GNU-MacOSX/fecha.o build/Debug/GNU-MacOSX/main.o build/Debug/GNU-MacOSX/objetoBase.o build/Debug/GNU-MacOSX/paciente.o build/Debug/GNU-MacOSX/padecimiento.o build/Debug/GNU-MacOSX/servicio.o 
Undefined symbols for architecture x86_64: 
    "vtable for servicio", referenced from: 
     servicio::servicio(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in servicio.o 
    NOTE: a missing vtable usually means the first non-inline virtual member function has no definition. 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make[2]: *** [dist/Debug/GNU-MacOSX/medicos] Error 1 
make[1]: *** [.build-conf] Error 2 
make: *** [.build-impl] Error 2 

나는 그 문제가 무엇인지 모르겠다. 프로그래밍에 초보자이기 때문에 이것에 대해 많이 모른다. 나를 도와 줘서 고마워.

+1

관련 코드도 함께 표시하십시오. – stefan

+0

QT의 경우 재구성해야하는 모든 것을 다시 작성하지 않은 경우가 많습니다. –

+0

이것은 .H 파일입니다 #ifndef의 SERVICIO_H 네임 스페이스를 사용하여 표준 #DEFINE \t SERVICIO_H 사용법 #include ; 클래스 servicio { public : servicio (string); 가상 문자열 toString() const; virtual ~ servicio(); 개인 : 문자열 nombre; }; \t/* SERVICIO_H */ #endif 다음 이는 .CPP입니다 : 사용법 #include "servicio.h" SERVICIO :: SERVICIO (문자열 브레) : 브레 (브레) { } 단지 노력 그 간단한 생성자를 할 – ChrisU

답변

4

함수 정의가 없기 때문에 링커에서 오류가 발생합니다. 3 개의 함수를 선언했지만 생성자 만 정의했습니다. 링커가 이러한 기능을 사용하지 않기 때문에 가상 지우기가 도움이됩니다. 그들이 가상 일 때, 링커는 vtable을 생성하기 위해 그것들을 사용합니다. 프로그램에서이 함수를 정의하지 않고이 함수를 사용하면 오류가 다시 발생합니다.

+0

괜찮 았어. 문제, 지금은 이해, 정말 고마워 !! – ChrisU

2

직접 오류를 읽을 시간이 걸릴 수 있습니다. 그렇게함으로써 시간을 절약 할 수 있습니다.

참고 : 누락 된 vtable은 일반적으로 첫 번째 비선형 가상 멤버 함수에 정의가 없음을 의미합니다.

그렇다면 선언 한 두 가지 기능에 대한 정의는 어디에 있습니까?

virtual string toString() const; 
virtual ~servicio(); 

이들은 존재하지 않습니다. 컴파일러는 그들이 존재하지 않는다고 말했습니다. 아니요. 컴파일러가 존재하지 않는다고 말했고, 존재하지 않는다고 당신에게 이야기 할 시간이 있습니다.

컴파일러가 왜 존재하지 않는지 알려주는 이유입니다. 그들이 존재하지 않기 때문에.

+2

그게 문제 였어, 고마워. – ChrisU

2

PSA 이것은 최고의 Google 검색 결과이므로 PSA입니다. Qt를 사용하는 경우이 오류는 해당 클래스에 대한 MOC 개체 파일을 작성하지 않았 음을 의미 할 수도 있습니다.

관련 문제