如何从 C++ 中的单独类访问静态映射?
How do I access a static map from a seperate class in C++?
我想访问存储在单独类中的静态映射,并循环访问和打印内容。
所以我有三个文件:
HasGlobals.cpp它有全球地图。
/* HasGlobals.cpp */
#include <string>
#include <map>
#include <iostream>
class HasGlobals{
public:
static std::map<int, std::string> globalData;
HasGlobals(){
globalData.insert(std::pair<int, std::string>(0, "data"));
};
~HasGlobals(){
};
};
WantsGlobals.cpp它有一个方法需要使用HasGlobals的map.cpp作为其方法之一。
/* WantsGlobals.cpp */
#include "HasGlobals.cpp"
#include <string>
class WantsGlobals{
public:
WantsGlobals(){
};
~WantsGlobals(){
};
//THIS IS THE METHOD THAT I CAN'T GET TO WORK
void printContentsOfGlobal(){
HasGlobals * globalRetriever = new HasGlobals();
for(std::map<int, std::string>::iterator it = globalRetriever->globalData.begin(); it != globalRetriever->globalData.end(); ++it){
std::cout << it->first << " " << it->second << std::endl;
}
};
};
Main.cpp它只是尝试在 WantsGlobals.cpp 中调用 printContentOfGlobal() 方法。
/* Main.cpp */
#include <iostream>
#include "WantsGlobals.cpp"
int main(){
WantsGlobals * globalRetriever = new WantsGlobals();
globalRetriever->printContentsOfGlobal();
}
现在这段代码无法编译并给了我
对"HasGlobals::globalData"的未定义引用
我将如何实现printContentOfGlobal(),以便我可以在单独的HasGlobals.cpp文件中检索map[globalData]中的数据?
编辑:感谢大家的帮助。 以下是我在大家的帮助下创建的代码。 是的,它仍然不完美,但它编译并执行所需的行为:
HasGlobals.hpp
#include <string>
#include <map>
#include <iostream>
class HasGlobals{
public:
static std::map<int, std::string> globalData;
HasGlobals(){};
~HasGlobals(){};
static std::map<int, std::string> createDummyData(){
std::map<int, std::string> m;
m[0] = "Help";
m[1] = "Me";
m[2] = "Stackoverflow";
m[3] = "You're my only hope.";
return m;
}
};
std::map<int, std::string> HasGlobals::globalData = HasGlobals::createDummyData();
WantsGlobals.hpp
#include "HasGlobals.hpp"
#include <string>
#include <map>
class WantsGlobals{
public:
WantsGlobals(){};
~WantsGlobals(){};
void printContentsOfGlobal(){
for(std::map<int, std::string>::iterator it = HasGlobals::globalData.begin(); it != HasGlobals::globalData.end(); ++it){
std::cout << it->first << " " << it->second << std::endl;
}
};
};
主.cpp
#include <iostream>
#include <"WantsGlobals.hpp">
int main(){
WantsGlobals * globalRetriever = new WantsGlobals();
globalRetriever->printContentsOfGlobal();
}
(CW,因为现在这只是一个欺骗的提示和技巧,留给后代。
为什么要#include
.cpp
文件?别这样。看起来这两个文件应该命名为.hpp
。
你很接近。由于地图是static
的,你不需要HasGlobals
的实例来访问它,所以HasGlobals * globalRetriever = new HasGlobals();
是没有意义的(加上你泄露了它)。
地图被"称为"HasGlobals::globalData
.
虽然你需要找到一些地方来向它添加数据;HasGlobals
构造函数不是正确的位置,因为每次实例化类时都会调用它。 最好在定义对象时使用初始化器,您忘记这样做,因此您在注释中提到了"未定义的引用"链接器错误。
从那时起,您将正确使用地图,除了此处的拼写错误:
std::map<int, std:;string>
// ^
- 如何在复杂继承中访问静态成员变量
- 如何在类内部使用和访问静态指针到成员值s_ptm?
- 从 exe 和 dll 访问静态库中的 extern 变量
- 线程时访问静态映射时出现隔离错误
- C++访问静态 constexpr 数组
- 是否通过单元化指针UB访问静态类成员
- 从多个文件访问静态全局 WinForm UI 对象
- 非静态函数可以访问静态变量吗?
- 为什么可以在没有实例变量的情况下访问静态回调方法中的静态成员变量?
- 如何从 C++ 中的单独类访问静态映射?
- 无法访问静态方法(C )
- 使用静态成员函数访问静态数据成员
- 在CPP中访问静态功能的指针
- 静态模板函数访问静态类成员
- 从成员变量访问静态 constexpr 成员,GCC 错误?
- 静态成员函数访问静态私有变量时的链接器错误
- 将对象数限制为1可以使用点运算符访问静态成员的1
- 为什么我无法访问静态函数中的私有构造函数,如下所示?
- 静态强制转换以访问静态常量类成员
- 访问静态和堆内存的速度