2016-07-25 179 views
0

我正在使用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和MyClass以及一个主函数)编译它;有效。 所以也许这是Qt Creator如何处理编译和链接的问题?但我不知道要检查哪个选项。

谢谢你的任何想法。

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

清洁和重建指出,真正的错误,并允许我解决我的项目。

+2

'myMap = new map ();'无效顺便说一句,你忘了编译tool.cpp – Jarod42

+0

你是对的,那一行是无效的,并且与编译过程搞砸了,通知我。 – Ety

回答

2

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

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

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

+0

这确实是一个项目问题:必须首先清理它才能向我显示上面评论中提到的错误(在工具类中)。编辑的问题。 – Ety