C++ 如何在不在主程序流中调用全局变量的情况下填充它?
我希望不必首先显式初始化就可以访问库的这一部分,我尝试了以下内容:C++ 如何在不在主程序流中调用全局变量的情况下填充它?,c++,C++,我希望不必首先显式初始化就可以访问库的这一部分,我尝试了以下内容: #pragma once #include <Windows.h> struct SysInfoClass { DWORD granB; SysInfoClass() { SYSTEM_INFO siSysInfo; GetSystemInfo(&siSysInfo); granB = siSysInfo.dwAllocationGranula
#pragma once
#include <Windows.h>
struct SysInfoClass {
DWORD granB;
SysInfoClass() {
SYSTEM_INFO siSysInfo;
GetSystemInfo(&siSysInfo);
granB = siSysInfo.dwAllocationGranularity;
}
};
SysInfoClass SysInfo();
#pragma一次
#包括
结构系统信息类{
德沃德·格兰布;
SysInfoClass(){
系统信息siSysInfo;
GetSystemInfo&siSysInfo;
granB=siSysInfo.dwAllocationGranularity;
}
};
SysInfoClass SysInfo();
好的,看起来不错。我希望这能在程序主函数执行之前创建SysInfoClass的实例,这样我就可以在任何地方运行auto x=SysInfo.granB,但它不起作用。我可以将SysInfo分配给对象,但无法访问其任何成员,这是为什么?您有语法错误。
而不是
SysInfoClass SysInfo();
你需要写作
SysInfoClass SysInfo;
按照您编写它的方式,编译器认为它是一个函数声明。在一个独立函数中,将全局变量转换为一个
静态
局部变量,该函数返回对该变量的引用
SysInfoClass& SysInfo()
{
static SysInfoClass sys_info;
return sys_info;
}
“无法访问”是什么意思?你有编译器错误吗?发生了什么错误?
SysInfoClass SysInfo()
是一个函数,而不是一个变量-可能这就是造成问题的原因-否则我不确定您在做什么,所以不确定出了什么问题。。。删除括号…否决-告诉某人做一些与他想做的完全不同的事情。@shoosh:嗯,我承认我不明白OP的问题是什么。不过,答案解决了问题并改进了代码。