将map从文件传递到c++类



我有这种情况,我试图传递一个映射后,我填充它,从一个文件到一个类:

A.h-一个正常的头文件,我有一个函数原型和一个映射

#include <unordered_map>
func1();
static std::unordered_map<glm::ivec3, Chunk*, KeyHasher> chunks;

A.cpp

#include "A.h"
func1() {
// ...
chunks.insert(pair<glm::ivec3, Chunk*>(pos, chunk));
cout << chunks.size(); // here I have the right size
// ...
}

B.h

#include "A.h"
class B {
public:
my_func();
}

B.cpp

B::my_func() {
// ...
cout << chunks.size(); // size is 0
for (auto& c : chunks) {
// ... do something
}
}

我的问题是,为什么在b.pchunks地图到达空?我想如果我用static就能解决问题。感谢您的宝贵时间!

chunks变量声明为A.h中的static。这就是问题所在。

每个.cpp,#includeA.h将获得chunks变量的副本。这就是为什么chunksA.cpp中填充,而在B.cpp中为空。

如果您想在翻译单元之间共享chunks变量,则需要将声明为extern而不是static,然后在.cpp文件之一中定义,例如:

A.h

#include <unordered_map>
func1();
extern std::unordered_map<glm::ivec3, Chunk*, KeyHasher> chunks;

A.cpp

#include "A.h"
std::unordered_map<glm::ivec3, Chunk*, KeyHasher> chunks;
func1() {
// ...
chunks.insert(pair<glm::ivec3, Chunk*>(pos, chunk));
cout << chunks.size(); // here I have the right size
// ...
}

B.h

class B {
public:
my_func();
};

B.cpp

#include "B.h"
#include "A.h"
B::my_func() {
// ...
cout << chunks.size(); // here I have the right size
for (auto& c : chunks) {
// ... do something
}
}

最新更新