2017-11-09 7 views
-4

この質問は私に野生のガチョウの追跡につながったので、事実を真似するためにそれを修正したいと思いました。私はこのコンストラクタが見つかりません - QtビルドプロセスにCPPファイルを追加する方法

//third party .h file 
class ChildX : public ParentY { 
    public: 
    OtherClass member; 
} 

//third party .h file 
class ParentY { 
    protected: 
    ParentY(); 
    //other public attributes 
} 

//third party .cpp file 
ParentY::ParentY {  
} 

のようなエラーがある私は役に立たないエラーメッセージ

Undefined reference to 'ParentY::ParentY()' in function 'SomeClass::DoX()'; 

を得た私は、これらのクラスのいずれかをコンパイルしようとした任意の時間に配置されたクラスのセットで働いています

完全に役に立たないが、私は最終的に問題がCPPファイルのコンストラクタによって発生していると判断しました。どうやら、ChildX.hファイルを含むコードは、ParentY.cppファイルに隠されたコンストラクタとリンクしていません。解決策(例:https://ubuntuforums.org/showthread.php?t=1966081)では、残りのビルドを実行する前に問題のcppファイルをコンパイルする必要があるようです。だから今、私はエラーがあると、それを解決する方法を、私はちょうどQtCreator

+5

'CoreStructのX;'と '新しいCoreStructは();'同じコンストラクタを使用します。 –

+1

'いくつかのクラスにはコンストラクタが定義されていません.'そして' CoreStruct x; 'も動作しません。 – Yakk

+1

秒待ってください。明らかにしてください:彼らはコンストラクタを持っていないか、またはデフォルトの(パラメータなしの)コンストラクタを持っていませんが、パラメータを必要とするコンストラクタを持っていますか? – user4581301

答えて

0

ソリューションは、三つの部分に来るでそれを行う方法を見つけ出すために必要なものを考え出したこと

  1. 個別にcppファイルを.oオブジェクトにコンパイルします。私が使用していた第三者図書館のためにあらかじめコンパイルされた.oファイルを使用することができたので、この手順については言及しません。明らかに、彼らは問題を認識し、すべてのクラスの.oファイルを準備しました。

  2. How to add object files to a project in Qtのアドバイスに従って、Qtの.proファイルのLIBS部分に.oファイルを追加します。

  3. コンパイルした.oファイルと他の.oオブジェクトの間には、さらに依存関係がある場合があります。 1つの場所でそれらをすべて取得できる場合は、.proファイルの1行ですべての依存関係を一度に取得できます。

    LIBS + = /パス/に/オブジェクト/ファイル

関連する問題