undefined reference to 'vtable for...'


이런 에러가 뜨는 경우 두 가지를 먼저 살펴보시면 문제 해결을 빨리 할 수도 있습니다.


1. virtual 키워드 사용한 곳 찾기

 - 구현을 강제하려고 순수 가상 함수로 만들어 놓은 인터페이스가 있다면,

 1.1. 해당 인터페이스를 구현 하였는지

 1.2 순수 가상 함수가 아니라 virtual 키워드만 추가한 것은 아닌지

   - 참고: 순수 가상함수 원형

     virtual void slotPendingProcess() = 0;

     virtual void slotPendingProcess() { } // 이렇게 해도 무방


2. QT에서는 목적 파일(*.o) 외에 QT에서 제공하는 특수한

moc_*.o/moc_*.cpp (Meta-object compiler) 파일이 생성됩니다.


자세한 내용은 http://doc.qt.io/qt-5/moc.html 이 곳과

https://kldp.org/node/123913 의 답변을 참고해주세요.


의심 되는 부분을 수정 하였음에도 (항목 1이나 그 외 문법상 이상이 없다고 판단)

에러가 나는 경우에는 위에서 언급한 moc_*.o/moc_*.cpp 파일을 의심해 봐야합니다.

위 파일은 컴파일 단계에서 갱신이 안되거나, (F5를 통해 실행하려고 할 때)

파일 이름이나 클래스 이름이 바뀌었는데 moc 가 갱신이 안되었거나 하기도 합니다.


이런 경우 Makefile 를 갱신해 주어야 하는데요,

qt에서는 Makefile을 직접 작성하지 않죠, qmake 를 한 번 해주고

클린 빌드를 통해서 이를 해결 할 수 있습니다.


저작자 표시
신고

'QT' 카테고리의 다른 글

undefined reference to 'vtable for...'  (0) 2016.05.19
반투명 그릴 때 배경 잔상 문제  (0) 2016.05.11
libwinpthread 가 계속 동적 빌드만 될 때  (0) 2016.04.28
디버깅 매크로  (0) 2016.04.19
QByteArray 의 reserve() vs resize()  (0) 2016.03.18
QT static build with mingw32  (0) 2015.09.17
Posted by 기타2번


티스토리 툴바