2011-02-04 7 views
1

私の現在のプロジェクトでは、 "collect2:Idが1の終了ステータスを返しました"次のコードを使用して:QObjectでクラスを使用している "collect2:Idが1の終了ステータスを返しました"(Qt CreatorでQT 4.7)

#ifndef BASE_02_H 
#define BASE_02_H 

#include <QtCore> 

class Base_02 
{ 

public: 
    Base_02(); 

    virtual void method()=0; 
}; 

#endif // BASE_02_H 

#include "base_02.h" 
#include <QtCore> 

Base_02::Base_02() 
{ 

} 

//---------------------------------------------------------------------------------------------------------------------------------- 

#ifndef DERIVED_02_H 
#define DERIVED_02_H 

#include <QtCore> 
#include "base_02.h" 

class Derived_02 : public Base_02 
{ 

public: 
    Derived_02(); 
    void method(); 
}; 

#endif // DERIVED_02_H 

#include "derived_02.h" 
#include <QtCore> 

Derived_02::Derived_02() 
{ 

} 

void Derived_02::method() 
{ 
    qDebug() << "Derived_02::method()"; 
} 

//---------------------------------------------------------------------------------------------------------------------------------- 

#ifndef BASE_H 
#define BASE_H 

#include <QtCore> 

class Base : public QObject 
{ 
    Q_OBJECT 

public: 
    Base(Base* p=NULL); 

    virtual void method()=0; 
}; 

#endif // BASE_H 

#include "base.h" 
#include <QtCore> 

Base::Base(Base* p) 
{ 

} 

//---------------------------------------------------------------------------------------------------------------------------------- 

#ifndef DERIVED_H 
#define DERIVED_H 

#include <QtCore> 
#include "base.h" 

class Derived : public Base 
{ 
    Q_OBJECT 

public: 
    Derived(Derived* p=NULL); 
    void method(); 
}; 

#endif // DERIVED_H 

#include "derived.h" 
#include "derived_02.h" 
#include <QtCore> 

Derived::Derived(Derived* p) 
{ 

} 

void Derived::method() 
{ 
    Derived_02 d; 
    d.method(); 
} 

//---------------------------------------------------------------------------------------------------------------------------------- 

#include <QtCore/QCoreApplication> 
#include <QtCore> 
#include "base.h" 
#include "derived.h" 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 



    Derived* derived = new Derived(); 



    return a.exec(); 
} 

をコンパイラは、次の言葉:

... MINGW32-メイク:/ Entwicklung SVN /デバッグテスト/ dataSenderReceiverExample」 G ++ -c:ディレクトリC:/Entwicklung SVN/debug test/dataSenderReceiverExample' C:/Qt/2010.04/mingw/bin/mingw32-make -f Makefile.Debug mingw32-make[1]: Entering directory Cを入力します-g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I "...... \ Qt \ 2010.04 \ Qt \ include \ QtCore" -I "...... \ Qt \ 2010.04 \ qt \には" -I "が含まれます。 。\ dataSenderReceiver "-I" ...... \ Qt \ 2010.04 \ Qt \ include \ ActiveQt "-I" debug "-I" ...... \ Qt \ 2010.04 \ qt \ mkspecs \ win32-g ++ "-o debug \ main.o main.cpp main.cpp:関数 'int main(int、char **)'内: main.cpp:14:警告:未使用変数 'derived' g ++ -enable-stdcall -fixedup -Wl、-enable-auto-import -Wl、-enable-runtime-pseudo-reloc -Wl、-subsystem、console -mthreads -Wl -o debug \ dataSenderReceiverExample.exe debug/main.o -L "c: \ Qt \ 2010.04 \ qt \ lib "-L ../ dataSenderReceiver/debug -ldataSenderReceiver -lQtCored4 mingw32-make [1]:ディレクトリを残すC:/Entwicklung SVN/debug test/dataSenderReceiverExample' mingw32-make: Leaving directory C:/ Entwicklung SVN/debug test/dataSenderReceiverExample ' ../dataSenderReceiver/debug /libdataSenderReceiver.a(derived.o):C:\Entwicklungデバッグテスト\ dataSenderReceiver/derived.cpp:14:未定義参照Derived_02::Derived_02()' ../dataSenderReceiver/debug/libdataSenderReceiver.a(derived.o):C:\Entwicklung SVN\debug test\dataSenderReceiver/derived.cpp:15: undefined reference to Derived_02 :: method() ' collect2:ldが1終了ステータスを返しました mingw32-make [1]:* [debug \ dataSenderReceiverExample.exe]エラー1 mingw32-make:* [デバッグ]エラー2 プロジェス "C:/Qt/2010.04/mingw/bin/ming32-make.exe"が実行されています。 FehlerバイムErstellenデProjekts dataSenderReceiverExample(ヅィエル:デスクトップ) バイムAusführenデビルドSchritts 'メイク'

助けてください!

+1

がderived.cppとderived_02.cppがcomoiledれませんように見える:

名前ライブラリB A .PROファイルのライブラリCの前に。あなたはQtCreatorを使用していますか、これをコマンドラインで実行していますか?あなたのメイクファイルは何ですか? –

答えて

1
#include "base_02.h" 
#include <QtCore> 

なければならない:

#include <QtCore> 
#include "base_02.h" 

そして、それがコンパイル!

1

私は次のような状況で、この問題を得た:


セイ

Aは、実行可能(FIコンソール)プロジェクトと BとCでは、ライブラリ(FI静的libに)プロジェクトや AですBを使用し、BはAが.PROファイルを経由してBライブラリとCライブラリを知っている必要があり、012

その後C.

を使用していますBは.proファイル経由でCライブラリを知っている必要があります。


はAに

を言います。プロファイルのライブラリCライブラリBの前に表記されています

LIBS *= -L"../C/debug" 
LIBS *= -lC 
INCLUDEPATH *= "../C" 

LIBS *= -L"../B/debug" 
LIBS *= -lB 
INCLUDEPATH *= "../B" 

その後

正確accures、上記のエラー。


ソリューション:

LIBS *= -L"../B/debug" 
LIBS *= -lB 
INCLUDEPATH *= "../B" 

LIBS *= -L"../C/debug" 
LIBS *= -lC 
INCLUDEPATH *= "../C"