2016-02-07 59 views
1

I'l喜歡這片庫來進行訪問,而無需先明確初始化,繼承人是我的嘗試:如何在不調用主程序流的情況下填充全局變量?

#pragma once 
#include <Windows.h> 

struct SysInfoClass { 
    DWORD granB; 
    SysInfoClass() { 
     SYSTEM_INFO siSysInfo; 
     GetSystemInfo(&siSysInfo); 
     granB = siSysInfo.dwAllocationGranularity; 
    } 
}; 

SysInfoClass SysInfo(); 

好吧,這似乎罰款。我期望在程序main函數執行前創建SysInfoClass的實例,這樣我就可以在任何地方使用auto x = SysInfo.granB,但它不起作用。我可以將SysInfo分配給事物,但我無法訪問其任何成員,爲什麼?

+0

你是什麼意思的「無法訪問」?你會得到一個編譯器錯誤?什麼是錯誤? – shoosh

+2

'SysInfoClass SysInfo()'是一個函數,而不是一個變量 - 也許這就是造成麻煩 - 否則我不知道你在做什麼,所以不知道是怎麼回事......刪除括號... –

回答

3

您有語法錯誤。
而不是

SysInfoClass SysInfo(); 

你需要寫

SysInfoClass SysInfo; 

你寫它的方式,編譯器認爲它是一個函數聲明。

+1

好抓住。也許如果OP發佈了一些實際的錯誤信息... –

-1

將一個全局變量變成一個static局部變量放在一個獨立函數中,該函數返回一個變量的引用。

SysInfoClass& SysInfo() 
{ 
    static SysInfoClass sys_info; 
    return sys_info; 
} 
+0

downvoted - 告訴人做一些完全不同於他想做的事情。 – shoosh

+0

@shoosh:呃,我承認我不明白OP的問題是什麼。儘管如此,答案解決了這個問題並改進了代碼。 –

相關問題