2017-10-30 13 views
0

2,3,4パラメータの間で最大値を見つける関数をオーバーロードするプログラムを作成しようとしています。私のコードは現時点ではちょっとうんざりしているようですが、実行するたびに "#include"の下にある恐ろしい赤い線と3つのパラメータ関数呼び出しを受け取ります。私は//それを無効にすると、2と4のパラメータは良いですが、私の3つのパラメータは良いです。あなたのうちの一人がそれを見て手伝ってもらえますか?ありがとうございました!関数のオーバーロードに問題がある

#include <cstdlib> 
#include <iostream> 

using namespace std; 


double max (double, double, double, double); 


int main(int argc, char** argv) { 

double result; 

result = max(10.0, 20.0); 
cout << "Max(10.0, 20.0) = " << result << endl; 
result = max(11.5, 21.2, 5.3); 
cout << "Max(11.5, 21.2, 5.3) = " << result << endl; 
result = max(1.8, 2.2, 1.7, 2.1); 
cout << "Max(1.8, 2.2, 1.7, 2.1) = " << result << endl; 
return 0; 


} 

double max(double a, double b) 
{ 
if (a > b) 
    return a; 
else 
    return b; 
} 

double max(double a, double b, double c) 
{ 
if (a > b && a > c) 
    return a; 

else if (b > a && b > c) 
    return b; 

else 
    return c; 
} 

double max(double a, double b, double c, double d) 
{ 
if (a > b && a > c && a > d) 
    return a; 
else if (b > a && b > c && b > d) 
    return b; 
else if (c > d) 
    return c; 
else 
    return d; 
} 
+2

'max'はすでに' std'名前空間に定義されています。あなたのプログラムから 'using namespace std;'を削除してください。 –

+0

したがって、2つの変数については、宣言されていないのでstd :: maxが使用されています.4変数の場合は、オーバーロードされた関数が使用されています。 3変数関数が宣言されていないため、エラーが発生しています。 – anotherone

答えて

2

あなたがそうでなければ、あなたの機能とstd::max間のあいまいさを引き起こしているusing namespace std;を取り除きます。

一般にusing namespace stdconsidered bad practiceであり、見た目に問題があります。

2

使用する前に、3つのパラメータで過負荷を宣言していません。あなたはそれを呼び出す前に、

double max(double, double, double); 

を追加します。

また、使用する前に2つのパラメータバージョンでオーバーロードを宣言する必要がありますが、標準ライブラリからバージョンを選択することになります。除外することは、その問題を検出する必要があります。

using namespace std; 

2

これはそのままコンパイルされません。あなたは現在のスコープにstd名前空間を導入しているが、どうやらstl_algobase.hヘッダを経由して、Linux GCC実装に1があるでしょうしながら、VSの実装にstd::maxへの呼び出しがありません。

は/ usr /含める/ローカル/ C++/7.2.0/bits/stl_algobase.h: のインスタンス化で 'constexpr const _Tp & std :: max(const _Tp &、const _Tp &、_Compare)[ _Tp = double; _Compare =ダブル] ':using namespace std;ステートメントを使用していない言われていること

double max(double, double); 
double max(double, double, double); 
double max(double, double, double, double); 
int main() { 
// same as before 
} 

Live example on Coliru

main()関数の前にすべての3つの関数宣言を提供します。

+1

はい!私は3つのパラメータのオーバーロードされた関数を宣言していないし、それはなぜ機能していないのですか?どうもありがとうございます!名前空間stdを使用する場合は、私の教授が使用すると言ったことにちょうど従っています。後ほど詳しく説明します)。 –

関連する問題