2009-09-18 126 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

相關問題