我有一个类来覆盖默认的空构造函数,以便为构造函数提供单个参数。如果我使用mfc IMPLEMENT_DYNAMIC宏与此类,我得到错误:没有适当的默认构造函数可用。通过添加一个空构造函数来解决它很简单,但我想知道为什么需要它。我被迫保护它并向它添加一个断言(false)以确保没有人使用它。
答案 0 :(得分:2)
以下内容在Visual Studio 2008下编译和运行。您使用的是哪个版本的Visual Studio?您可以尝试编译此代码段并发布错误消息吗?您可以查看afx.h
并发布DECLARE_DYNAMIC
和IMPLEMENT_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需要一个无参数的构造函数。