C++
에 GUI를 만들었습니다. Qt
을 Eclipse에서 사용했지만 버튼 클릭 이벤트를 할당 할 때 매크로가 포함되었습니다. Q_OBJECT
이 포함되어야합니다. 내 QWidget
클래스의 헤더 파일에 있습니다.Q_OBJECT로 인해 'v_table에 대한 정의되지 않은 참조'문제가 발생했습니다.
실행하면 창은 더 이상 표시되지 않고 생성자 및 내 QWidget
클래스의 소멸자에서 오류가 발생했습니다.
#ifndef MEDIAPLAYERWIZARD_H_
#define MEDIAPLAYERWIZARD_H_
#include "../MediaPlayer.Helpers/SystemConfiguration.h"
#include "../MediaPlayer.Helpers/StringHelpers.h"
#include "../MediaPlayer.DataAccess/DataRepository.h"
#include "../MediaPlayer.Helpers/Globals.h"
#include <QtGui/QApplication>
#include <QtGui/QLabel>
#include <QtGui>
#include <QtCore>
#include <sstream>
#include <iostream>
class MediaPlayerWizard: public QWidget {
Q_OBJECT
public:
MediaPlayerWizard(QWidget *parent = 0);
void Initialize();
virtual ~MediaPlayerWizard();
private:
QLabel *lblWelcomeMessage;
//Input
QLineEdit *txtName;
QLabel *lblName;
QLineEdit *txtActivationCode;
QLabel *lblActivationCode;
//Buttons
QPushButton *btnActivate;
QPushButton *btnCancel;
//Layouts
QVBoxLayout *fldWizardLayout;
QHBoxLayout *fldWelcomeMessage;
QHBoxLayout *fldName;
QHBoxLayout *fldActivationCode;
QHBoxLayout *fldButtons;
private slots:
void btnActivateClicked();
};
#endif /* MEDIAPLAYERWIZARD_H_ */
다음과 같이 생성자와 소멸자는 다음과 같습니다 : 다음과 같이
헤더 파일은
내 헤더 파일의 모든 내 .PRO 파일의HEADERS
목록에 나열됩니다
MediaPlayerWizard::MediaPlayerWizard(QWidget *parent):QWidget(parent)
{
Initialize(); //Instantiates the buttons and labels etc..
}
MediaPlayerWizard::~MediaPlayerWizard(){
}
, 그리고 Q_OBJECT
매크로를 헤더 파일에 추가 한 후 QMake
을 실행했습니다.
초기화 코드 :
당신은 mediaplayerwizard.h에서//Q_OBJECT
주석을 제거 할 필요가
Building target: MediaPlayerCPP
Invoking: Cross G++ Linker
g++ -L/usr/lib -o "MediaPlayerCPP" ./src/MediaPlayer.o ./src/MediaPlayerWizard.o ./src/mysqlapidemo.o ./MediaPlayer.Services/MediaPlayerClient.o ./MediaPlayer.Helpers/DeviceManagement.o ./MediaPlayer.Helpers/Globals.o ./MediaPlayer.Helpers/MD5.o ./MediaPlayer.Helpers/StringHelpers.o ./MediaPlayer.Helpers/SystemConfiguration.o ./MediaPlayer.DataAccess/DataObject.o ./MediaPlayer.DataAccess/Database.o ./MediaPlayer.DataAccess/Media.o ./MediaPlayer.DataAccess/MediaLog.o ./MediaPlayer.DataAccess/MediaLogProvider.o ./MediaPlayer.DataAccess/MediaProvider.o ./MediaPlayer.DataAccess/MediaSchedule.o ./MediaPlayer.DataAccess/MediaScheduleProvider.o ./MediaPlayer.DataAccess/SystemConfig.o ./MediaPlayer.DataAccess/SystemConfigProvider.o -lQtCore -lmysqlclient -lz -lQtGui
./src/MediaPlayerWizard.o: In function `MediaPlayerWizard::MediaPlayerWizard(QWidget*)':
/home/gtteam/Projects/MediaPlayerCPP/Debug/../src/MediaPlayerWizard.cpp:10: undefined reference to `vtable for MediaPlayerWizard'
/home/gtteam/Projects/MediaPlayerCPP/Debug/../src/MediaPlayerWizard.cpp:10: undefined reference to `vtable for MediaPlayerWizard'
./src/MediaPlayerWizard.o: In function `MediaPlayerWizard::~MediaPlayerWizard()':
/home/gtteam/Projects/MediaPlayerCPP/Debug/../src/MediaPlayerWizard.cpp:77: undefined reference to `vtable for MediaPlayerWizard'
/home/gtteam/Projects/MediaPlayerCPP/Debug/../src/MediaPlayerWizard.cpp:77: undefined reference to `vtable for MediaPlayerWizard'
collect2: error: ld returned 1 exit status
make: *** [MediaPlayerCPP] Error 1
와 선언을
void btnActivateClicked();
을 변경하려고합니다. 실행시 또는 컴파일시 – vahancho
? 어쨌든 빌드 디렉토리를 정리하고, 매크로를 추가하고 다시 빌드하십시오. – UmNyobe
MediaPlayerWizard.cpp를 빌드 할 때 – GenericMadman