2012-02-04 23 views
1

私はchar*,char*, ostreamというコンストラクタを持つC++クラスを持っています。私はostreamcerr)のデフォルト値を提供したいと思います。これはヘッダか.cppファイルで行われますか?コンストラクタのデフォルト引数 - C++

+1

値で 'ostream'を渡すことはできません。 –

+0

可能重複:http://stackoverflow.com/questions/4989483/where-to-put-default-parameter-value-in-c – Karine

+1

ドン; * .cppの用語ヘッダーを使用しないでください。これらの中で)。しかし、むしろ「宣言」と「定義」。デフォルトの引数は '宣言'に入ります。 –

答えて

8

パラメータを参照パラメータにする必要があります。std::cerrをコピーしないでください。おそらく、クラスのすべてのクライアントが見ることができるように、ヘッダファイルにデフォルトパラメータを指定する必要があります。

class MyClass { 
public: 
    MyClass(char*, char*, std::ostream& = std::cerr); 
    // ... 
}; 
+0

私はそれを実現しました。 Hm。迅速な対応に感謝します。次の問題を解消する! (今、私はsegfaultsを取得しています。Woot。)(別の理由で)。 – Linuxios

1

デフォルトの引数は、関数が宣言されたときに指定されます。この場合のヘッダファイルです。

1

ヘッダーファイルでは、既定値を宣言します。

functionname(char *arg1, char* arg2, ostream &arg3 = cerr); 

そして、あなたは、単にそれがあることを期待したいのcppファイルに:

functionname(char *arg1, char* arg2, ostream &arg3) { 
} 

IE、.cppファイルに入れないでください。

+0

値で 'ostream'を渡すことはできません! –

+0

refに変更されました。ありがとう。 –

0

C++は別のコンパイルを使用します。各cppファイルは別々にコンパイルされます。 cppのデフォルト値であれば正常に動作しますが、このデフォルト値はcppファイルでのみ表示されます。

プロジェクトコンパイラの他のファイルにヘッダファイルをインクルードすると、ヘッダファイルから必要なすべての情報が決まります。デフォルト値がcppファイルの場合、プロジェクトの他の部分は、既にコンパイルされている可能性があるため、cppファイルを調べることはできません。したがってほとんどの場合、のデフォルト値はヘッダファイルに保存してください。

cppファイルコンパイラをコンパイルするときにデフォルト値を使用するかどうかを選択できず、コンパイルエラーが発生するなど、cppファイルとhファイルの両方にデフォルト値を設定することはできません。

あなたのソリューションは、(ヘッダファイルで)です:あなたは、CPPファイルのデフォルト値を指定することもまれで

class MyClass 
{ 
public: 
    MyClass(char*, char*, ostream& = cerr); 
... 
}; 

、あなたが見ると、他のすべての部分の間、それらを使用するためにのみ、このファイルをしたい場合プロジェクトはこれを行うことができませんでした。しかし、これはごくまれに発生します

関連する問題