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: error: invalid initialization of reference of type of 'std::istream& {aka std::basic_istream&}' from expression of type 'int' ..\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 的类型是 int 而不是 istreeam - 您将 i 传递给函数,因此它抱怨它是 int 而不是 istream。您可能可以将 std::cin 直接传递给该函数。

于 2013-10-29T20:49:14.713 回答