2016-08-08 8 views
-3

私はこのコンストラクタがあります。C++のコンストラクタエラー

member(char* name,char* lastName,int age, char* gender); 

を、私はメンバーを作成するために私のメイン機能でこれを持っています。

member("John","Smith",20); 

私は、私はエラーを取得する4つのパラメータのうちの3を提供しているので: 候補は4つの引数、3は提供を期待しています。 パラメータを逃してもスキップするように修正する方法。

+0

使用パラメータ。 –

+0

どうすればいいですか?主な機能で2つのメンバーを作成すると動作しますか?メンバー(「Mary」、「Smith」、「Female」など) メンバー( "John"、 "Smith"、20); –

+0

さて、あなたは3つの引数でそれを呼び出すと、何が起こりたいですか? – juanchopanza

答えて

4

最後の引数のデフォルト値を指定する必要があります。次のようなものがあります:

member(char *name, char *lastName, int age, char* gender = NULL); 

最後の引数が指定されていない場合は、デフォルト値のNULLが使用されます。

+0

ここでニックピッキングのビット: 'nullptr' sirの使用を奨励 – WhiZTiM

+0

それは良い点です! – grigor

+0

@grigor私はこれを試しましたが、それは私に各パラメータのデフォルト値を行うように頼んでいます。私がそれをするとき、私はコンストラクターを呼び出すためにあいまいなエラーを出します。 –

1

多かれ少なかれパラメータが必要な状況では、関数のオーバーライドを作成できます。

たとえば、4つのパラメータを取り、それを適切に処理し、もう1つが3をとり、独自の方法で処理するという点を除いて、同じ名前の2つのコンストラクタを作成できます(明らかに)。

例:

member(char name, char lastName, int age){ 
    //Do stuff here for the situation where 3 parameters are inputed 
} 

member(char name, char lastName, int age, char gender){ 
    //Do stuff here for the situation where 4 parameters are inputed 
} 
+0

私はこのために1つのコンストラクタを使用する必要があります@Bhaskar –

1

あなたは、たとえば、一つの関数のために複数の署名を提供することができます。デフォルト値で

member(char* name, char* lastName, int age) 

member(char* name, char* lastName, int age, char* gender) 
関連する問題