0

我试图在头文件中以矢量格式定义一个连续的 RID 范围:

    #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;

这里有什么遗漏吗。我有一组错误:

4

2 回答 2

0

您正在尝试拥有一个静态初始化的数据,并且希望它位于 avector的对象中(如果我理解正确的话)。不幸的是,这在 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;
于 2012-07-25T01:04:00.560 回答
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);
    }
}    

这里与#define-ing id 应该看起来的代码的唯一区别是ResourceIDs::init()在开头的调用main、需要ResourceIDs::和数组语法。

于 2012-07-25T02:42:30.107 回答