2016-07-25 8 views
0

Qt Creatorを使用しているプロジェクトで作業しています。コンストラクタ内のデフォルトのコンストラクタへの未定義の参照

のは、私はシンプルなツールのクラスがあるとしましょう:

#include "tool.h" 

using namespace std; 

Tool::Tool() 
{ 
    myMap = new map<string, MyObject*>(); 
    // populate myMap 
} 

その後、私は別のクラスのコンストラクタでクラスを使用する:

このようなデフォルトコンストラクタと

#ifndef TOOL_H 
#define TOOL_H 

#include <map> 
#include <string> 
#include "myobject.h" 

class Tool 
{ 
public: 
    Tool(); 

private: 
    const std::map<std::string, MyObject*> myMap; 
}; 

#endif // TOOL_H 

#include "myclass.h" 

using namespace std; 

MyClass::MyClass() 
{ 
    Tool t; 
} 

しかし、次のコンパイルエラーが発生します。

In function 'MyClass::MyClass()': 
undefined reference to 'Tool::Tool()' 

もちろん、myclass.hにはtool.hが含まれているので、なぜそれが見つからないのかわかりません。私はメンバ変数としてtを宣言するポインタを使用しようとしましたが、このエラーが発生し続けます。

これらのクラスを使用して私の外で最小限のプロジェクトを作成しようとしましたが、g ++(ToolとMainClassを使ってMyClass)を使ってコンパイルしました。出来た。 Qt Creatorがコンパイルとリンクをどのように処理するかは、多分問題になりますか?しかし、どのオプションをチェックするのか分かりません。

ありがとうございます。

編集:問題はQt Creator環境から発生しました。私は実際にツールの前にMyClassを作成しましたが、プロジェクトのクリーニングを行わずに、エラーの内容を教えずにコンパイルに失敗しました。ツールクラスで真のエラーはmyMap = new map<string, MyObject*>();だったので、ツールは決してコンパイルされませんでした(Jarod42が言及したように)、MyClassのコンパイルエラーです。

クリーニングと再構築で真のエラーが指摘され、私のプロジェクトを修正することができました。

+2

'myMap = new map ();'が無効ですあなたは正しくtool.cをコンパイルするのを忘れました – Jarod42

+0

あなたはそうです、その行は無効で、私に知らせる。 – Ety

答えて

2

undefined reference to 'Tool::Tool()'はリンカエラーメッセージです。

これは、cppファイルが個別に正常にコンパイルされたことを意味しますが、リンカーはバイナリを作成するときにTool::Tool()を見つけることができません。

ビルドシステムでプロジェクト設定の問題が発生している可能性があります。

+0

これは実際にはプロジェクトの問題でした。最初に、上記のコメント(Toolクラス)に記載されているエラーを表示できるようにする必要がありました。編集された質問。 – Ety

関連する問題