为什么IMPLEMENT_DYNAMIC需要空构造函数?

时间:2009-09-18 07:32:25

标签: c++ mfc

我有一个类来覆盖默认的空构造函数,以便为构造函数提供单个参数。如果我使用mfc IMPLEMENT_DYNAMIC宏与此类,我得到错误:没有适当的默认构造函数可用。通过添加一个空构造函数来解决它很简单,但我想知道为什么需要它。我被迫保护它并向它添加一个断言(false)以确保没有人使用它。

2 个答案:

答案 0 :(得分:2)

以下内容在Visual Studio 2008下编译和运行。您使用的是哪个版本的Visual Studio?您可以尝试编译此代码段并发布错误消息吗?您可以查看afx.h并发布DECLARE_DYNAMICIMPLEMENT_DYNAMIC(以及IMPLEMENT_RUNTIMECLASS等其他相关宏)的定义吗?

#include <afx.h>

struct CAge : CObject
{
    CAge(int n) {}
    DECLARE_DYNAMIC(CAge)
};

IMPLEMENT_DYNAMIC(CAge, CObject)

int main()
{
    CAge a(10);
}

答案 1 :(得分:0)

只有在没有声明自己的构造函数时,C ++才会提供默认的无参数构造函数。我认为DECLARE_DYNAMIC需要一个无参数的构造函数。