2012-04-27 6 views
1

空のベクターパラメータを渡す:私はこのクラスを使用している

class DogTrainer 
{ 
    public: 
     DogTrainer(int identity,const std::string& nom, const std::vector<Dog*> dogz) :  
     idD(identity), 
     name(nom), 
     trainees(dogz) 
    { }; 

     ~DogTrainer(); 

    private: 
     int idD; 
     string name; 
     std::vector<Dog*> trainees; 
}; 

が、私は、新しいオブジェクトをインスタンス化するときに時々、私は「研修生」のパラメータを渡す必要はありませんので、私がしたいですこの

DogTrainer* Trainer=new DogTrainer(my_id, my_name); 

は、したがって、私は私のDogTrainerコンストラクタ

DogTrainer(int identity,const std::string& nom, const std::vector<Dog*> dogz="") : 
    idD(identity), 
    name(nom), 
    trainees(dogz) 
{ }; 

に変更しようとしましたが、それはdidnのを行うための可能性について持っています何か助けてください!

+0

なぜ文字列リテラルですか?これはstd :: stringではありません。 – Pubby

答えて

3

として、あなたのコンストラクタを宣言します。

DogTrainer(int identity,const std::string& nom, 
      const std::vector<Dog*> dogz = std::vector<Dog*>()); 

""const char*あり、そしてstd::vectorはそれから構築可能ではありません。

なお、dogzにはあまり意味がありません。const std::vector<Dog*>です。非constにするか、constの参照にしてください。

+0

このデフォルトパラメータの使用方法を教えてください。これは既にベクトルのデフォルト値です。 –

+0

@BorisStrandjev:デフォルトを指定しない場合、引数はオプションではなく、OPはオプションのパラメータを取得しようとしています。 – Mat

+0

@BorisStrandjev:この特定のケースでは、あなたは正しいです。とにかく 'vector'メンバは適切に初期化されます。しかし、一般的な議論についてはポスターが混乱しているようですので、私は一般的な答えを出しました。 – jamesdlin

1

vectorに空の文字列を割り当てようとしているため、機能しません。最後のパラメータを省略してコンストラクタをオーバーロードするだけです。

DogTrainer(int identity,const std::string& nom, const std::vector<Dog*> dogz) 
    :idD(identity), name(nom), trainees(dogz) { 
}; 

DogTrainer(int identity,const std::string& nom):idD(identity), name(nom) { 
}; 

これは、ユーザーの視点から達成したいものと事実上同じです。

+0

私は2つのコンストラクタを実行しましたが、コンパイラは同じ関数の2つの候補のあいまいさのエラーを生成しました!だから私は何をすべきですか? – Glolita

+0

@Glolitaかもしれませんが、最初のものでデフォルト値を削除していませんでしたか?私の解決策では、デフォルト値を指定しないでください。 –

関連する問題