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类:

#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