2009-09-18 88 views
0

我有一个类重写了默认的空构造函数,为构造函数提供了一个参数。如果我在这个类中使用mfc IMPLEMENT_DYNAMIC宏,我得到错误:没有合适的默认构造函数可用。通过添加一个空的构造函数很容易解决,但我想知道为什么需要这样做。我不得不做这个保护,并添加一个assert(false)给它,以确保没有人使用它。为什么IMPLEMENT_DYNAMIC需要一个空构造函数?

回答

0

仅当您不声明自己的构造函数时,C++才会提供默认的无参构造函数。我认为DECLARE_DYNAMIC需要一个无参数的构造函数。

+1

也许我的问题不是很好。我明白,DECLARE_DYNAMIC需要一个无参数构造函数,我在问为什么是这种情况。 – Jon 2009-09-18 20:40:36

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); 
} 
+0

啊,我看看那是如何工作的。 – 2009-09-18 07:55:04

相关问题