[英]Running function with std::istream
我正在嘗試在函數中輸入一個值,如下所示:
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'.. \\ working.cpp類型的表達式對'std :: istream&{aka std :: basic_istream&}'引用的初始化無效:7:5:錯誤:傳遞'int funkcija(std :: istream&)'的參數1
這是什么意思,以及如何解決? 謝謝!
您正在嘗試傳遞已經讀取的整數,請嘗試:
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 );
我的類型是int而不是istreeam-您正在將i傳遞給函數,因此它抱怨它是int而不是istream。 您可能可以將std :: cin直接傳遞給該函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.