This question already has answers here:
What is an undefined reference/unresolved external symbol error and how do I fix it?
(32个答案)
3年前关闭。
我正在使用Qt Creator进行项目。
假设我有一个简单的Tool类:
使用这样的默认构造函数:
然后,我想在另一个类的构造函数中使用该类:
但是我收到以下编译错误:
自然地,myclass.h包含tool.h,所以我不明白为什么找不到它。我尝试使用指针,将t声明为成员变量,但是我一直收到此错误。
我试图使用这些类在我的外部做一个最小的项目,并用g ++(工具,然后是具有主要功能的MyClass)进行编译;有效。
那么Qt Creator处理编译和链接的方式可能有问题吗?但我不知道要检查哪个选项。
谢谢您的任何想法。
编辑:问题来自Qt Creator环境。我实际上是在Tool之前创建MyClass的,并且没有清理项目,但编译失败而没有告诉我错误是什么;真正的错误是在Tool类中的
清理和重建指出了真正的错误,并允许我修复我的项目。
(32个答案)
3年前关闭。
我正在使用Qt Creator进行项目。
假设我有一个简单的Tool类:
#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的,并且没有清理项目,但编译失败而没有告诉我错误是什么;真正的错误是在Tool类中的
myMap = new map<string, MyObject*>();
,因此从未对Tool进行过编译(如Jarod42所述),因此MyClass的编译错误。清理和重建指出了真正的错误,并允许我修复我的项目。
最佳答案
undefined reference to 'Tool::Tool()'
是链接器错误消息。
这意味着您的cpp文件已单独成功编译,但是在创建二进制文件时,链接程序找不到Tool::Tool()
。
这很可能是您的构建系统中的项目设置问题。
10-08 18:37