对构造函数中的默认构造函数的未定义引用
我正在使用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的编译错误。
清洁和重建指出,真正的错误,并允许我解决我的项目。
undefined reference to 'Tool::Tool()'
是一个链接器错误消息。
这意味着您的cpp文件单独成功编译,但链接器在创建二进制文件时找不到Tool::Tool()
。
这很可能是您的构建系统中的项目设置问题。
这确实是一个项目问题:必须首先清理它才能向我显示上面评论中提到的错误(在工具类中)。编辑的问题。 – Ety
'myMap = new map();'无效顺便说一句,你忘了编译tool.cpp –
Jarod42
你是对的,那一行是无效的,并且与编译过程搞砸了,通知我。 – Ety