对未定义的全局unordered_map的引用

时间:2014-01-09 06:51:22

标签: c++ unordered-map

我有三个文件:

TableGenerataor.h
TableGenerataor.cpp
Analyzer.cpp

我在TableGenerator.h中声明了unordered_map并使用它在TableGenerataor.cpp中创建了unorderd_map的对象。

map_t obj1;
data d;

TableGenerator.h

namespace N {

typedef std::tuple<int, char> key_t;

struct key_hash : public std::unary_function<key_t, std::size_t>
{
std::size_t operator()(const key_t& k) const
{
return std::get<0>(k) ^ std::get<1>(k) ;
}
};

struct key_equal : public std::binary_function<key_t, key_t, bool>
{
bool operator()(const key_t& v0, const key_t& v1) const
{
return (
std::get<0>(v0) == std::get<0>(v1) &&
std::get<1>(v0) == std::get<1>(v1) 
);
}
};

struct data
{
int AlertNo;

};

typedef std::unordered_map<const key_t,data,key_hash,key_equal> map_t;

}

enter code here

我想使用在Analyzer.cpp中的TableGenerator.cpp文件中创建的这个unordered_map。我想保留这个unordered_map直到程序结束。为此,我想使unordered_map全局化。全局似乎是更好的选择,而不是将map作为参数发送到其他函数。我在Analyzer.cpp中使用关键字extern。

extern map_t obj1; 外部数据d;

但在编译时仍然会说对obj1 的未定义引用。请帮助我如何使unorderd_map Global在其他cpp文件中使用它。其次,是他们做任何其他更好的方式来做这件事,而不是让地图全球化。

2 个答案:

答案 0 :(得分:0)

听起来你有语法问题。

请参阅这些资源以查看一些示例:

答案 1 :(得分:0)

变量声明与定义在同一名称空间中吗?例如。可能已定义N::obj1,但引用了obj1


原始答案:

您在Analyzer.cpp中写道:

extern map_t obj1;
extern data d;

所以我假设你有

#include "TableGenerator.h"

;&#34; Analyzer.cpp&#34;。

将两个全局变量的声明移动到&#34; TableGenerator.h&#34;。 (将它们的定义保留在&#34; TableGenerator.cpp&#34;。)

尝试访问&#34; Analyzer.cpp&#34;中的N::obj1N::d