>  기사  >  백엔드 개발  >  Qt 애플리케이션에서 \"Q_OBJECT 연결 오류: \'vtable에 대한 정의되지 않은 참조\'\"가 발생하는 이유는 무엇입니까?

Qt 애플리케이션에서 \"Q_OBJECT 연결 오류: \'vtable에 대한 정의되지 않은 참조\'\"가 발생하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-28 03:51:02241검색

 Why Am I Getting a

Q_OBJECT 연결 오류: 'vtable에 대한 정의되지 않은 참조'

다음 Qt 코드 조각을 고려하세요.

<code class="cpp">class T : public QObject, public QGraphicsItem
{
    Q_OBJECT

public:
    T() {}

    QRectF      boundingRect() const {return QRectF();}
    void        paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
                      QWidget *widget) {}
};

int main()
{
    T t;
    return 0;
}</code>

이 코드를 컴파일할 때 다음과 같은 링커 오류가 발생할 수 있습니다:

undefined reference to `vtable for T'
undefined reference to `vtable for T'
...

해결 방법:

이 오류는 일반적으로 클래스의 MOC 생성 단위가 연결 프로세스에 포함되지 않을 때 발생합니다. MOC 유닛에는 Q_OBJECT 매크로를 포함하여 클래스에 대한 메타 정보가 포함되어 있습니다.

가능한 원인 및 해결 방법:

  • 별도의 헤더 파일: 클래스 선언이 별도의 헤더 파일에 있는지 확인하세요. 빌드 시스템이 클래스 선언을 찾기 위해 구현 파일을 스캔하지 않을 수 있습니다.
  • MOC 생성: MOC 단위가 생성되었는지 확인하세요. qmake를 다시 실행하여 qmake가 필요한 MOC 규칙을 생성하도록 강제합니다. Qt Creator를 사용하는 경우 프로젝트 컨텍스트 메뉴에서 "qmake 실행"을 선택하세요.
  • Q_OBJECT 매크로: 클래스 선언에서 Q_OBJECT 매크로를 올바르게 사용했는지 확인하세요. 생성자 정의 앞에 배치해야 합니다.
  • 상속: 이 클래스가 이전에 Qt 메타 객체 시스템에 속하지 않은 경우(예: Q_OBJECT 매크로가 없거나 다른 클래스에서 상속됨) ), qmake를 다시 실행하거나 프로젝트 파일을 약간 변경하여 qmake 실행을 트리거하십시오.

위 내용은 Qt 애플리케이션에서 \"Q_OBJECT 연결 오류: \'vtable에 대한 정의되지 않은 참조\'\"가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.