c++ - 构造函数中对默认构造函数的 undefined reference

标签 c++ constructor qt-creator default-constructor

<分区>

我正在使用 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 的编译错误。

清理和重建指出了真正的错误并允许我修复我的项目。

最佳答案

对“Tool::Tool()”的 undefined reference 是链接器错误消息。

这意味着您的 cpp 文件已成功编译,但链接器在创建二进制文件时找不到 Tool::Tool()

这很可能是您的构建系统中的项目设置问题。

关于c++ - 构造函数中对默认构造函数的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38564545/

相关文章:

c++ - 在 QAbstractTableModel 上的 setModel 之后插入数据

c++ - 在C++中将一种结构类型分配给另一种类型

javascript - javascript 构造函数序言的目的是什么?

C++ 类 : How does one 'reset' a template field in the move constructor?

c++ - 如何在 QString/QDebug 中使用 Unicode 字符?

c++ - 从 std::string 转换为 bool

c++ - 我如何实现嵌套的 boost::mpl::fold

java - 如何正确使用构造函数?

c++ - Raspberry pi (QT C++) 和 Arduino (Arduino IDE) 之间的通信

c++ - QtWidget 窗口的 QQuickView 子窗口