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のコンパイルエラーです。
クリーニングと再構築で真のエラーが指摘され、私のプロジェクトを修正することができました。
'myMap = new map();'が無効ですあなたは正しくtool.cをコンパイルするのを忘れました –
Jarod42
あなたはそうです、その行は無効で、私に知らせる。 – Ety