2011-02-11 19 views
8

私はMinGWコンパイラを使用して、C++でQtに簡単なGUIアプリケーション(これまでのもの)を作成しようとしています。しかし、コンパイラは、のmultiple definition of 'WiimoteScouter::WiimoteScouter(QWidget*)'wiimotescouter.cppであることを通知しています。私はヘッダーが複数回含まれていないことを確認するためにチェックを使用していますが、明らかに動作していません。理由はわかりません。ここで C++ Qt複数定義

は、ヘッダファイルです:

#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 

そして、ここでの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")); 
} 

最後に、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

これは、コンパイラの代わりにリンカエラーのように聞こえます。 .proファイルに複数の.cppファイルがありますか?また、完全なエラーメッセージを投稿することも役に立ちます。 –

+2

あなたのC++プロジェクトはなぜそうですか?それにPHPファイル? 0_o –

+0

私の間違いはここにコピーして、それは.cppだ、私はPHPで働いていた。 ;) –

答えて

36

これは、ソースファイルがプロジェクト(.proまたは.pri)ファイルに重複してしまう前に発生しています。プロジェクトファイルの "SOURCES ="と "SOURCES + ="行をすべて確認し、cppファイルが複数回そこにないことを確認してください。ちょうど参照用

2

私はMinGWのを使用していないが、これはコンパイラエラーではなくリンカエラーのように聞こえる。この場合、.CPPファイルがプロジェクトに2回追加されていないことを確認する必要があります。私はまた、拡張子が "php"であることに気付きました。これは "cpp"でなければならないので非常に珍しいことです。

0

回答:私は代わりに

#include myclass.h 
0

あなたが別のフォルダに同じ名前を持つ2つの.uiファイルがある場合、これがまた起こることができるの

#include myclass.cpp 

含めた

。対応するヘッダーは同じディレクトリに作成され、その結果1つが上書きされます。少なくともそれは私の問題でした。

0

スロットの宣言が、スロットの1つではなくヘッダーファイルの見出しの下にリストされていたときに、このエラーメッセージが表示されました。チェックするためにこのエラーメッセージを経験している人のためのもう一つのこと。

問題を解決し、次回スロットを手動で作成する必要があるかどうかを確認する必要があります。

0

私にとっては、MinGWを使用しているWindowsでのQtのコンパイルモデルによるものでした。

私のコードは、Linuxのための完全に正常にコンパイルが、Windows用のリンカエラーは、次のファイルのために起こった:まず

Message.cpp 
Util.cpp 

、.PROファイルでは、私がどのようなファイル名を見つけることができませんでした。例

message.cc 
util.cc 

と拡張が異なっていたが、何とかそれは混乱を作成しました。その後、私は私が一緒にコンパイルされた外部のGoogleいるProtobufライブラリは、という名前のフォルダ内のいくつかのライブラリファイルを持っていた、ということを考え出し鋭く観察Qtコンパイルで。私はちょうどこれらのライブラリファイルにアンダースコアを追加し、うまくいきました。