<分区>
我正在使用 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++ 编译它(工具,然后是带有主要功能的 MyClass);有效。 那么这可能是 Qt Creator 如何处理编译和链接的问题?但我不知道要检查哪个选项。
感谢您的任何想法。
编辑:问题来自 Qt Creator 环境。我实际上在 Tool 之前创建了 MyClass,并且在没有清理项目的情况下编译失败但没有告诉我错误是什么;真正的错误是 myMap = new map<string, MyObject*>();
在 Tool 类中,因此从未编译过 Tool(如 Jarod42 所述),因此出现 MyClass 的编译错误。
清理和重建指出了真正的错误并允许我修复我的项目。