0

関数に値を入力しようとしています。これは次のようになります。

int funkcija( std::istream & in ) {
    int value(0);
    in >> value;
    if(not in) throw std::exception();
    if( value%2 == 0 ) {
        return (value/2);
    }
    else return (value*3)+1;
}

実行しようとすると:

int i(0);
std::cout << "Input a number: ";
std::cin >> i;
funkcija(i);

エラーが発生します: ..\working.cpp:17:14: エラー: タイプ 'int' の式からのタイプ 'std::istream& {aka std::basic_istream&}' の参照の初期化が無効です ..\working.cpp :7:5: エラー: 'int funkcija(std::istream&)' の引数 1 を渡しています

それは何を意味し、どのように解決するのですか?ありがとうございました!

4

2 に答える 2

3

すでに読み取った整数を渡そうとしています。試してください:

std::cout << "Input a number: ";
int i = funkcija(std::cin);
std::cout << i << " ";

これは機能しますが、奇妙に思えます。設計を改善するために、入力処理と出力処理を計算から分離することを検討してください。関数を次のように変更します。

int funkcija( int value ) {
   if( value%2 == 0 ) {
       return (value/2);
   }
   else return (value*3)+1;
}

そしておそらく次のように呼び出します:

std::cout << "Input a number: ";
int i;
if( !( std::cin >> i ) ) throw std::exception();
do {
    i = funkcija( i );
    std::cout << i << " ";
} while( i != 1 );
于 2013-10-29T20:49:24.090 に答える
0

i は istreeam ではなく int 型です。関数に i を渡しているため、istream ではなく int であると不平を言っています。おそらく std::cin を関数に直接渡すことができます。

于 2013-10-29T20:49:14.713 に答える