2017-04-12 29 views
-2

私はC++を新しくしました。現在、void関数を学習しています。 void関数を使用して、数値を2乗する関数を記述しようとしています。ここに私のコードです。 IDEが私を与えるC++ void関数の演習エラー

#include "std_lib_facilities.h" 

void square(int); 

int main() 
{ 
int x = 0; 
cout << "Please enter a number. It will be squared."; 
cin >> x; 
cout << x << 't' << square(x); 
} 

void square(int x) 
{ 
int y = x*x; 
cout << y; 
} 

エラーは次のとおりです。

no match for 'operator<<' (operand types that are 'std::basic_ostream<char>' 
and 'void') 

は経験から言えば、多くの人々は、それは問題ではありません、ヘッダーファイル std_lib_facilities.hについて質問します。私はこのヘッダーファイルを使用して多くの演習を行ったので、それらはすべて働いたと言えるでしょう。

ご協力いただきありがとうございます。

+1

関数を呼び出した結果を出力しようとしています。 – chris

答えて

3

void関数は値を直接返すことはできません。ほとんどの人はこのように、二乗実装する非void型関数を使用します。

int square(int x) 
{ 
    return x * x; 
} 

は、私はあなたのsquare機能がstd::cout自体への二乗値を書き込むことがわかります。それは奇妙ですが、あなたが本当にそのように行いたい場合は、あなたがmain関数の最後の行を置き換える必要があります:あなたは、一般的である、式にvoid関数の結果を使用することはできません

cout << x << 't'; 
square(x); 

元のコードの問題。

0

square()は無効です。つまり、何も返しません。

cout << x << 't' << square(x);は、戻り値square()(これは既に存在しないと言います)を表示しようとします。これは意味をなさないので、コンパイラは不平を言う。

squareは、印刷するのではなくintを返します。

int square(int x) 
{ 
    return x*x; 
} 
0

戻り値の型を変更すると、エラーが消滅します。コンパイラのエラーは、あなたの関数が(間違って)コンパイラに伝えているように、オーバーロードされたバージョン< <がパラメータとしてvoidをとるためです。