map没有为自定义结构命名模板类型

时间:2015-06-09 13:14:06

标签: c++ c++11

我有一个简单的对象:

struct TimeObject {
    private:
       UInt64 m_currentTime;
       bool m_isStarted;
}

此对象在另一个结构的地图中使用:

std::map<Utf8String, TimeObject> m_myMap;   // *

并在struct的构造函数中实例化:

m_myMap = new std::map<Utf8String, TimeObject>();

似乎说定义(*所在的位置)会导致以下错误: 错误:命名空间'std'中的'map'未命名模板类型

问题的第一部分是:理解错误。当您了解自己可以解决问题时。我的第一个猜测是struct TimeObject 是在同一个文件中创建的,并且在编译这一行时没有定义它的定义,所以它会抛出一个错误。即使结构未在其他结构中声明,但发生了这种情况,但如下所示:

struct TimeObject{}
struct MyNewObject
{
    private: std::map<Utf8String,TimeObject> m_myMap;
}

那么这个特殊的错误尖叫是什么?我应该在结构中定义TimeObject,以便理解吗?

1 个答案:

答案 0 :(得分:5)

您需要#include <map>。如果你写using namespace std;using std::map;,那么你不需要限定名称,但编译器仍然需要知道在哪里找到声明。