2012-08-25 82 views
4

我想設置我的功能類對象參數設置爲默認值。但是當我嘗試這樣做時,它在編譯時失敗。如何將默認參數設置爲C++中的類對象?

class base { 
// ... 
}; 

int myfunc(int a, base b = NULL) { 
    if (NULL = b) { 
     // DO SOMETHING 
    } else { 
    // DO SOMETHING 
    } 
} 

這裏的時候,我試圖編譯它,這給了我錯誤認爲 「默認參數基極b是int型的」

+2

你需要做'B'的指針,'base'這個工作:'基地* B = NULL' – jrok

回答

11

你這裏有三個明顯的選擇。

首先,使用過載,以便呼叫者可以選擇是否通過b

int myfunc(int a) { ... } 
int myfunc(int a, base& b) { ... } 

這樣你就可以通過b而不必使用指針。請注意,您應該使b爲引用或指針類型,以避免slicing該對象。其次,如果您不想要2個獨立的實現,請將b指針設置爲NULL

int myfunc(int a, base* b = NULL) { ... } 

第三,你可以使用的東西封裝可爲空的概念,如boost::optional

int myfunc(int a, boost::optional<base&> b = boost::optional<base&>()) { ... } 
-1

是這樣的:

const T defVal; 
void MyFunc(T t = defVal) { 
[...] 
} 

void MyFunc(T t = T()) { 
[...] 
} 

void MyFunc(T* t = NULL) { 
[...] 
} 
12

C++中的對象不能爲NULL

要設置參數爲默認值,只需使用:

int myfunc(int a, base b = base()) 
+0

是'基地()'調用'base'的構造? – 0x499602D2

+0

@David yes,'base()'default-構造一個類型爲「base」的對象。 –

相關問題