我正在使用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,然后使用带有main函数的MyClass)编译它;有效。 那么也许这是Qt Creator如何处理编译和链接的问题?但我不知道要检查哪个选项。
感谢您的任何想法。
编辑:问题来自Qt Creator环境。我实际上在Tool之前创建了MyClass,并且没有清理项目编译失败而没有告诉我错误是什么; Tool类中的真正错误是myMap = new map<string, MyObject*>();
,因此从未编译过Tool(如提到的Jarod42),因此MyClass的编译错误。
清理和重建指出了真正的错误并允许我修复我的项目。
答案 0 :(得分:3)
undefined reference to 'Tool::Tool()'
是链接器错误消息。
这意味着您的cpp文件已成功编译,但链接器在创建二进制文件时无法找到Tool::Tool()
。
这很可能是构建系统中的项目设置问题。