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 回答