我有三个文件:
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文件中使用它。其次,是他们做任何其他更好的方式来做这件事,而不是让地图全球化。
答案 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::obj1
和N::d
。