我正在尝试在我的函数中输入一个值,如下所示:
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:错误:'std :: istream&amp;类型的引用无效初始化{aka std :: basic_istream&amp;}'来自'int'类型的表达式 .. \ working.cpp:7:5:错误:传递'int funkcija(std :: istream&amp;)'的参数1
它是什么意思以及如何解决它?谢谢!
答案 0 :(得分: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 );
答案 1 :(得分:0)
我的类型为int而不是istreeam - 你将i传递给函数,因此它抱怨它是一个int而不是一个istream。您可以直接将std :: cin传递给函数。