构造函数

时间:2016-07-25 09:49:58

标签: 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 ++(Tool,然后使用带有main函数的MyClass)编译它;有效。 那么也许这是Qt Creator如何处理编译和链接的问题?但我不知道要检查哪个选项。

感谢您的任何想法。

编辑:问题来自Qt Creator环境。我实际上在Tool之前创建了MyClass,并且没有清理项目编译失败而没有告诉我错误是什么; Tool类中的真正错误是myMap = new map<string, MyObject*>();,因此从未编译过Tool(如提到的Jarod42),因此MyClass的编译错误。

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

1 个答案:

答案 0 :(得分:3)

undefined reference to 'Tool::Tool()'是链接器错误消息。

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

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