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' 카테고리의 다른 글
5.10.1 static build error (2) | 2018.03.23 |
---|---|
버전 정보 넣기 (0) | 2016.09.26 |
반투명 그릴 때 배경 잔상 문제 (0) | 2016.05.11 |
libwinpthread 가 계속 동적 빌드만 될 때 (0) | 2016.04.28 |
디버깅 매크로 (0) | 2016.04.19 |