我正在使用Qt Creator开发项目。对构造函数中的默认构造函数的未定义引用
比方说,我有一个简单的工具类:
#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 "tool.h"
using namespace std;
Tool::Tool()
{
myMap = new map<string, MyObject*>();
// populate myMap
}
然后我想使用的类在另一个类的构造函数:
#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和MyClass以及一个主函数)编译它;有效。 所以也许这是Qt Creator如何处理编译和链接的问题?但我不知道要检查哪个选项。
谢谢你的任何想法。
编辑:问题来自Qt Creator环境。我实际上在Tool之前创建了MyClass,没有清除项目编译失败,没有告诉我错误是什么; Tool类中的真实错误是myMap = new map<string, MyObject*>();
,所以Tool从未编译(如Jarod42提到的),因此MyClass的编译错误。
清洁和重建指出,真正的错误,并允许我解决我的项目。
'myMap = new map();'无效顺便说一句,你忘了编译tool.cpp –
Jarod42
你是对的,那一行是无效的,并且与编译过程搞砸了,通知我。 – Ety