2012-07-25 92 views
0

我試着在頭文件矢量格式來定義RID的一個連續範圍的數組:定義資源的ID在頭文件

#include<vector> 
    #include<stdlib.h> 
    #include<iostream> 

    #define vector<int> IDM_POPUP_LAST (5); 
    for(i = 0; i < IDM_POPUP_LAST.size(); i++) 
    IDM_POPUP_LAST [i] = i + 90; 

有什麼在這裏失去了。我有一組錯誤:

+0

哦,那就是你的意思。您需要將這些底部3移動到您使用它們的任何函數中。 – chris 2012-07-25 00:55:54

+0

我試圖將RID傳遞給函數,以便可以在那裏處理。那麼我怎樣才能將其他RID移動到正在使用的函數中。我應該在頭文件中定義IDM_POPUP_LAST的RID? – crr 2012-07-25 01:01:27

+0

當您使用'define'時,'IDM_POPUP_LAST'只是一種類型,您不能將其用作變量。 – aasa 2012-07-25 01:08:25

回答

0

您正試圖靜態初始化數據,並且您希望它位於vector的對象中(如果我理解正確)。不幸的是,這種方式在C++中是不可能的。但是也有其他的選擇,你可以探索:

1)使用靜態數組,這樣的事情:

int IDM_POPUP_LAST[] = {1, 2, 3, 4, 5}; 

2)具有被初始化在main()早期或通過一個虛擬類的構造函數的向量,像這樣:

vector<int> IDM_POPUP_LAST(5); 
struct DummyInitializer 
{ 
    DummyInitializer() 
    { 
    // code to initialize the vector IDM_POPUP_LAST 
    } 
} global_var_so_the_constructor_is_called_before_main; 
0

您的變量聲明是錯誤的。變量通常的語法聲明:

std::vector<int> IDM_POPUP_LAST (5); 

除此之外,for不能簡單地將一個函數的外放。

這就是說,這可能是你用作全局變量的東西。解決這個問題的一種方法是使其成爲類的靜態成員,並具有初始化它的函數。您甚至可以添加其他類型的ID在這裏,當你決定你想要他們,並根據需要添加它們初始化到功能:

//resource.h 

struct ResourceIDs { 
    static std::vector<int> menus; 
    static void init(); 

    //Let's add in three cursors 
    static std::vector<int> cursors; 
}; 

//NOTE - these are all better off in a .cpp 
#include "resources.h" //if in the cpp 

std::vector<int> ResourceIDs::menus (5); //define the menus member 
std::vector<int> ResourceIDs::cursors (3); //define the cursors member 

void ResourceIDs::init() { 
    for (int i = 0; i < menus.size(); ++i) //note the type mismatch since vector 
     menus[i] = i + 90;     //uses size_t, which is unsigned 

    //let's do cursors starting at 150 
    for (int i = 0; i < cursors.size(); ++i) 
     cursors[i] = i + 150; 
} 

現在你只需要確保初始化它們,然後你可以使用他們無論你需要:

#include <windows.h> 
#include "resource.h" 

int main() { 
    ResourceIDs::init(); 
    //create window, message loop, yada yada 
} 

LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { 
    switch (msg) { 
     case WM_COMMAND: 
     //check the menu ids using ResourceIDs::menus[x] 

     default: 
      return DefWindowProc (hwnd, msg, wParam, lParam); 
    } 
}  

這裏從定義-ING的ID應該是什麼代碼#像唯一的區別是在main開始到ResourceIDs::init()一個電話,需要ResourceIDs::和數組語法。