2011-02-11 15 views
8

Estoy tratando de crear una aplicación GUI simple (hasta ahora) en Qt con C++ usando el compilador MinGW. Sin embargo, el compilador me informa que tengo un multiple definition of 'WiimoteScouter::WiimoteScouter(QWidget*)' en line 4 de wiimotescouter.cpp. Estoy usando un cheque para asegurarme de que el encabezado no se incluye varias veces, pero aparentemente no funciona, y no estoy seguro de por qué.C++ Qt Múltiples definiciones

Aquí está el archivo de cabecera:

#ifndef WIIMOTESCOUTER_H 
#define WIIMOTESCOUTER_H 

#include <QWidget> 

class QLabel; 
class QLineEdit; 
class QTextEdit; 

class WiimoteScouter : public QWidget 
{ 
    Q_OBJECT 

public: 
    WiimoteScouter(QWidget *parent = 0); 

private: 
    QLineEdit *eventLine; 
}; 

#endif // WIIMOTESCOUTER_H 

Y aquí está el archivo CPP:

#include <QtGui> 
#include "wiimotescouter.h" 

WiimoteScouter::WiimoteScouter(QWidget *parent) : 
    QWidget(parent) 
{ 
    QLabel *eventLabel = new QLabel(tr("Event:")); 
    eventLine = new QLineEdit; 

    QGridLayout *mainLayout = new QGridLayout; 
    mainLayout->addWidget(eventLabel, 0, 0); 
    mainLayout->addWidget(eventLine, 0, 1); 

    setLayout(mainLayout); 
    setWindowTitle(tr("Wiimote Alliance Scouter")); 
} 

Por último, el main.cpp:

#include <QtGui> 
#include "wiimotescouter.h" 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    WiimoteScouter wiimoteScouter; 
    wiimoteScouter.show(); 

    return app.exec(); 
} 
+1

Eso suena más como un error de engarce en lugar de uno de compilador. ¿Tiene más de un archivo .cpp en su archivo .pro? Y publicar el mensaje de error completo ayudaría también. –

+2

¿Por qué tiene su proyecto C++.archivos php en ella? 0_o –

+0

Mi error al copiarlo aquí, es un .cpp, estoy acostumbrado a trabajar con PHP. ;) –

Respuesta

36

He visto esto suceder antes cuando un archivo de origen se duplicó en el archivo de proyecto (.pro o .pri). Compruebe todas las líneas "SOURCES =" y "SOURCES + =" en su archivo de proyecto y asegúrese de que el archivo cpp no ​​esté allí más de una vez.

2

no uso, pero MinGW esto suena como un error del enlazador en lugar de un error del compilador. Si este es el caso, entonces debe verificar que el archivo .CPP no se haya agregado al proyecto dos veces. También noté que la extensión es "php", esto es muy inusual ya que debería ser "cpp".

0

respuesta apenas para la referencia:

me incluyo

#include myclass.cpp 

en lugar de

#include myclass.h 
0

Esto también puede ocurrir si tiene dos archivos .ui con el mismo nombre en diferentes carpetas . Sus encabezados correspondientes están construidos en el mismo directorio, lo que hace que uno se sobrescriba. Al menos ese era mi problema.

0

Recibí este mensaje de error cuando tenía mis declaraciones de tragamonedas listadas bajo el encabezado de señales en el archivo de encabezado, en lugar de las tragamonedas. Otra cosa para cualquiera que experimente este mensaje de error es buscar.

Cortar y pegar resuelto el problema y la necesidad de comprobar la próxima vez que creo ranuras manualmente.

0

Para mí fue debido al modelo de compilación de Qt en Windows que usa MinGW.

Mi código compilado perfectamente bien para Linux, pero para Windows los errores de enlace estuviera pasando por los archivos siguientes:

Message.cpp 
Util.cpp 

En un primer momento, en el archivo .pro, no he podido encontrar ningún nombre de archivo similares. Luego observando intensamente me di cuenta de que, la biblioteca de Google protobuf externo, que estaba recopilando a lo largo, tenía algunos archivos de la biblioteca dentro de su carpeta denominada como:

message.cc 
util.cc 

Los casos y las extensiones eran diferentes, pero de alguna manera creada desastre en la compilación de Qt. Acabo de agregar un guión bajo a esos archivos de la biblioteca y las cosas funcionaron bien.

Cuestiones relacionadas