precio para gui full creator c++ qt qmake

c++ - para - Referencia no definida a vtable. Intentando compilar un proyecto de Qt



qt para c++ (15)

Estoy usando Code::Blocks 8.02 y el compilador mingw 5.1.6. Recibo este error cuando compilo mi proyecto de Qt:

C: / Documents and Settings / The Fuzz / Desktop / GUI / App_interface.cpp | 33 | referencia indefinida a `vtable para AddressBook ''

Archivo AddressBook.h:

#ifndef ADDRESSBOOK_H #define ADDRESSBOOK_H #include <QWidget> class QLabel; class QLineEdit; class QTextEdit; class AddressBook : public QWidget { Q_OBJECT public: AddressBook(QWidget *parent = 0); private: QLineEdit *nameLine; QTextEdit *addressText; }; #endif

Archivo AddressBook.cpp:

#include <QtGui> #include "addressbook.h" AddressBook::AddressBook(QWidget *parent) : QWidget(parent) { QLabel *nameLabel = new QLabel(tr("Name:")); nameLine = new QLineEdit; QLabel *addressLabel = new QLabel(tr("Address:")); addressText = new QTextEdit; QGridLayout *mainLayout = new QGridLayout; mainLayout->addWidget(nameLabel, 0, 0); mainLayout->addWidget(nameLine, 0, 1); mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop); mainLayout->addWidget(addressText, 1, 1); setLayout(mainLayout); setWindowTitle(tr("Simple Address Book")); }


Al usar Qt Creator:

  1. Build → Ejecutar qmake
  2. Build → Rebuild All

Asumiendo que está usando qmake para generar su Makefile, asegúrese de que AddressBook.h esté especificado en la variable HEADERS de su archivo .pro, por ejemplo

HEADERS = AddressBook.h


El problema es casi seguro que no está compilando o no está enlazando en el archivo moc_AddressBook.cpp generado. (Debería haberse generado para usted; está ejecutando el moc de Qt en su código antes de compilar, ¿no?)

Para responder un poco más a fondo, la macro Q_OBJECT señala la herramienta Q_OBJECT Qt para crear un archivo de implementación adicional que contiene el código necesario para admitir el sistema de metainformación de QObject . Si tuviera alguna señal o ranura, también haría algunas cosas para ellos.

Una solución alternativa podría ser eliminar la macro Q_OBJECT . Probablemente no quiera hacer esto, pero ayudaría al problema inmediato, y no es estrictamente necesario con el código que ha presentado.

Además, me gustaría señalar que su línea:

#include "addressbook.h"

Probablemente debería ser:

#include "AddressBook.h"

según cómo presentaste los nombres de archivo en la pregunta.


En mi caso Rebuild All no fue suficiente, tuve que eliminar el directorio de compilación y hacer Rebuild All, ¡y luego funcionó!


Estoy usando Qt Creator para compilar y ejecutar mis programas, no uso Qt command prompt a menudo. Una cosa que hice para deshacerme del molesto error " vtable something something " es agregar las siguientes líneas al archivo .pro .

TEMPLATE = aplicación

QT + = núcleo


Llego al mismo problema, reconstruyo el proyecto, nunca actualizo el Makefile, elimino el Makefile y lo reconstruyo, el problema se ha ido. ps: ejecutar ''make'' desde la línea de comandos puede proporcionarle información detallada que el IDE, y es útil para obtener el problema real.


Lo obtuve usando funciones virtuales puras. Por ejemplo, "virtual void process ();" dio este error, mientras que "virtual void process () = 0;" lo hizo desaparecer Para cualquiera que esté buscando en Google este problema, verifique eso primero. Estoy usando Netbeans con el compilador MinGW.


Obtendrá el mismo mensaje de error si accidentalmente agrega un prototipo de destructor. Agregue una definición de destructor vacío o elimine el prototipo.


Para los proyectos de CMake, configure CMAKE_AUTOMOC en ON, esto solucionó mi problema.

#Find includes in corresponding build directories set(CMAKE_INCLUDE_CURRENT_DIR ON) # Instruct CMake to run moc automatically when needed. set(CMAKE_AUTOMOC ON)


Tuve el mismo problema al intentar usar una función virtual protegida. Dos cosas funcionaron.

  1. Cambiando el void process(); void process() = 0;
  2. Making process() público en lugar de privado

Tuve el mismo problema, pero tan pronto como definí mi constructor en el archivo de encabezado en lugar de .cpp, el error desapareció. También faltaba el archivo moc correspondiente en el sistema de archivos y en la sección Makefile "compiler_moc_header_make_all". Ejecuté un qmake y finalmente todo construido con éxito. Fui a ver el Makefile y estaba allí ahora.


Una de las causas es cuando declaras funciones virtuales en una clase y no defines su cuerpo.


Vaya al archivo .pro y asegúrese de que el archivo .h tenga ''incluir'' antes. HEADERS + = include / file.h / include / file2.h


eliminó la carpeta de compilación, reinició Qt Creator y funcionó


Advertencia: ¡No haga esto si ya tiene un archivo .pro, lo perderá!

Para garantizar automáticamente que se generen todos los archivos moc cpp, puede obtener qmake para generar automáticamente un archivo .pro en lugar de uno.

correr

qmake -project

en el directorio del proyecto, y qmake escaneará tu directorio en busca de todos los encabezados C ++ y archivos fuente para generar archivos moc cpp.