将地图从文件传递到 class c++
pass map from file to class c++
我有这种情况,我试图在填充地图后将其从文件传递到 class:
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.cpp chunks
地图到达时是空的?我认为如果我使用 static
这将解决我的问题。感谢您的宝贵时间!
您在 A.h
中将 chunks
变量声明为 static
。就是这个问题。
#include
的 A.h
的每个 .cpp
都将获得 自己的 chunks
变量副本。这就是为什么 chunks
在 A.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
}
}
我有这种情况,我试图在填充地图后将其从文件传递到 class:
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.cpp chunks
地图到达时是空的?我认为如果我使用 static
这将解决我的问题。感谢您的宝贵时间!
您在 A.h
中将 chunks
变量声明为 static
。就是这个问题。
#include
的 A.h
的每个 .cpp
都将获得 自己的 chunks
变量副本。这就是为什么 chunks
在 A.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
}
}