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

変数宣言が間違っています。変数は通常、次の構文で宣言されます。

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

それに加えて、for単に関数の外に置くことはできません。

そうは言っても、これはおそらくグローバル変数として使用するものです。これを回避する1つの方法は、初期化する関数を使用して、クラスの静的メンバーにすることです。必要に応じて、他のタイプの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);
    }
}    

ここでのIDの#define-ingのコードとの唯一の違いはResourceIDs::init()、の先頭での呼び出しmain、の必要性ResourceIDs::、および配列構文です。

于 2012-07-25T02:42:30.107 に答える
0

あなたは静的に初期化されたデータを取得しようとしていて、それを のオブジェクトに入れたいと思っていvectorます(私があなたを正しく理解していれば)。残念ながら、これはこの方法で C++ で行うことはできません。ただし、探索できる他のオプションがあります。

1) 次のような静的配列を使用します。

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

main()2)次のように、初期段階で、またはダミー クラスのコンストラクターによって初期化されるベクターを用意します。

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 に答える