2012-07-05 77 views
1

我是新的C++(從C#背景)和我有以下簽名的函數C++使用參數的缺省值

void AddBenchNode(ref_ptr<Group> root ,ref_ptr<Node> benches, bool setAttitude = false, float scale_x =.15, float scale_y =15, float scale_z = 15, int positionx = 250, int positiony = 100, int positionz =0) 
{ 

} 

但是當我嘗試如下調用的代碼中,我得到一個錯誤其中說功能不需要4個參數。

//then I try to call my function like so 
AddBenchNode(root, benches, false, 250); 

,但我反而會收到以下錯誤消息

錯誤C2660: 'AddBenchNode':函數不接受3個參數

希望瞭解的C++是如何做到這一點,而不是一個解釋?

+8

默認參數應該在頭文件中聲明,而不是在實現文件中聲明。 – 2012-07-05 14:15:05

+1

你應該提供一個最小的自包含的編譯示例,每個人都可以嘗試自己看看你看到了什麼。 – PlasmaHH 2012-07-05 14:15:39

+0

請完整編譯錯誤。 – inkooboo 2012-07-05 14:16:28

回答

6

檢查.hpp文件中的原型。它可能宣佈爲

void AddBenchNode(ref_ptr<Group> root ,ref_ptr<Node> benches, bool setAttitude, 
        float scale_x, float scale_y, float scale_z, int positionx, 
        int positiony, int positionz); 

編輯:標題中的原型應該是

void AddBenchNode(ref_ptr<Group> root ,ref_ptr<Node> benches, bool setAttitude = false, float scale_x =.15, float scale_y =15, float scale_z = 15, int positionx = 250, int positiony = 100, int positionz =0); 

然後你的cpp文件應該只有

void AddBenchNode(ref_ptr<Group> root ,ref_ptr<Node> benches, bool setAttitude, float scale_x, float scale_y, float scale_z, int positionx, int positiony, int positionz) 
{ 

} 

也就是說,默認參數是在原型,而不是實際的定義。

+0

這是原型void AddBenchNode(osg :: ref_ptr ,osg :: ref_ptr ,bool,float,float,float,int,int,int); – user272671 2012-07-05 14:28:03

+0

我的問題是爲什麼我無法用這種方式調用相同的函數AddBenchNode(root,longs,false,250); – user272671 2012-07-05 14:28:58

+0

好的,我已經編輯了清晰度爲 – Wernsey 2012-07-05 14:31:48