C ++结构默认构造函数

时间:2013-11-11 14:19:16

标签: c++ constructor struct

我正在使用自动源代码的一部分
我有一个结构:

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

我怎么只是从自动源代码中复制/粘贴代码,但在那里它会很好地编译 什么错了

2 个答案:

答案 0 :(得分:2)

看起来类luabridge::LuaRef没有默认构造函数(请参阅documentation),因此编译器也无法为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) {}
};

答案 1 :(得分: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变量。