1

私は
構造を持つautoitソースコードの一部を使用しています:

typedef struct
{
    WPARAM  wParam;                             // Hotkey ID
    LPARAM  lParam;                             // Key and modifiers (control, alt, etc)
    luabridge::LuaRef lFunction;                // Function to call
} HotKeyDetails;

クラスのプライベート ストレージにこの構造体の配列を作成します。

static HotKeyDetails    *m_HotKeyDetails[MAXHOTKEYS];   // Array for tracking hotkey details

そして、この構造の新しいものを作成したいとき:

m_HotKeyDetails[nFreeHandle] = new HotKeyDetails;   // Create new entry

このエラーが発生します:

1>Scripts.cpp(1216): error C2512: 'HotKeyDetails' : no appropriate default constructor available

autoitソースコードからコードをコピー/貼り付けただけですが、そこではうまくコンパイルされ
ます

4

2 に答える 2

2

クラスluabridge::LuaRefにはデフォルトのコンストラクターがないようです (ドキュメントを参照)。そのため、コンパイラーはHotKeyDetailsどちらのデフォルトのコンストラクターも生成できません。

これを修正するには、コンストラクターを追加するだけです。例えば:

struct HotKeyDetails {
    WPARAM  wParam;                             // Hotkey ID
    LPARAM  lParam;                             // Key and modifiers (control, alt, etc)
    luabridge::LuaRef lFunction;                // Function to call

    explicit HotKeyDetails(lua_State* L): wParam(NULL), lParam(NULL), lFunction(L) {}
};

この構造体をデフォルトで構築可能にしたい場合はlFunction、ポインターを作成する必要があります。

struct HotKeyDetails {
    WPARAM  wParam;                             // Hotkey ID
    LPARAM  lParam;                             // Key and modifiers (control, alt, etc)
    luabridge::LuaRef *lFunction;               // Function to call

    HotKeyDetails(): wParam(NULL), lParam(NULL), lFunction(NULL) {}
};
于 2013-11-11T14:26:45.707 に答える
1

デフォルトのコンストラクターを HotKeyDetails 構造体に追加してみてください。お気に入り:

struct HotKeyDetails
{
    HotKeyDetails() : wParam(0), lParam(0), lFunction(L) {}

    WPARAM  wParam;                             // Hotkey ID
    LPARAM  lParam;                             // Key and modifiers (control, alt, etc)
    luabridge::LuaRef lFunction;                // Function to call
} ;

lua_State* Lただし、この構造体を配列で使用する場合は、アプリケーションによって提供された変数を提供/追跡する必要があります。

于 2013-11-11T14:29:58.127 に答える