将 (cin >> someVar) 的 return 分配给 C++ 中的 istream 变量时出错
Error when assigning the return of (cin >> someVar) to an istream variable in C++
我刚开始学习 C++ 作为一门附加语言,遇到了标题中提到的问题。这是我开始时使用的代码:
#include "HelloWorldWriter.h"
#include <iostream>
using namespace std;
int HelloWorldWriter::getNumberOfRepetitions() {
cout << "Enter number of Hello Worlds: ";
int repetitions = 0;
if(cin >> repetitions){
if(repetitions > 0){
return repetitions;
}
} else{
return 0;
}
}
...
我假设 cin >> repetitions
会将用户输入的值存储到 repetitions
和 return true
中,如果用户输入的内容可以解析为整数,否则为假。然后我尝试将 cin >> repetitions
的结果分配给一个布尔值,但它产生了一个错误,显示 "Types bool and istream are not compatible"。然后我尝试了以下作业:
istream inputSuccessful = cin >> repetitions;
然而这产生了一个错误,说 "basic_istream::basic_istream(const basic_istream &) is deleted"。
我现在有以下问题:
1)当使用cin >> someInt
(整数someInt
作为target/argument)时,什么行为(目标变量中的值,return值,下一个期间的行为调用那个运算符,...) 如果用户输入一个没有前导数字的单词(即不能解析为整数),你应该期待吗?
2) 如何将 cin >> someInt
的结果保存在变量中?它必须是什么类型?该值与布尔表达式有何关系?
这个声明
istream inputSuccessful = cin >> repetitions;
要求将 cin
复制到 inputSuccessful
。流的复制构造函数被删除,因此会出现错误。然而,复制或引用 cin
是没有意义的,因为无论你可以用引用做什么,你也可以直接用 cin
做。
您应该将变量设为 bool
:
bool inputSuccessful(cin >> repetitions);
现在 inputSuccessful
将包含 true
如果读取 repetitions
成功,否则 false
。 this Q&A.
中描述了其工作方式
我刚开始学习 C++ 作为一门附加语言,遇到了标题中提到的问题。这是我开始时使用的代码:
#include "HelloWorldWriter.h"
#include <iostream>
using namespace std;
int HelloWorldWriter::getNumberOfRepetitions() {
cout << "Enter number of Hello Worlds: ";
int repetitions = 0;
if(cin >> repetitions){
if(repetitions > 0){
return repetitions;
}
} else{
return 0;
}
}
...
我假设 cin >> repetitions
会将用户输入的值存储到 repetitions
和 return true
中,如果用户输入的内容可以解析为整数,否则为假。然后我尝试将 cin >> repetitions
的结果分配给一个布尔值,但它产生了一个错误,显示 "Types bool and istream are not compatible"。然后我尝试了以下作业:
istream inputSuccessful = cin >> repetitions;
然而这产生了一个错误,说 "basic_istream::basic_istream(const basic_istream &) is deleted"。
我现在有以下问题:
1)当使用cin >> someInt
(整数someInt
作为target/argument)时,什么行为(目标变量中的值,return值,下一个期间的行为调用那个运算符,...) 如果用户输入一个没有前导数字的单词(即不能解析为整数),你应该期待吗?
2) 如何将 cin >> someInt
的结果保存在变量中?它必须是什么类型?该值与布尔表达式有何关系?
这个声明
istream inputSuccessful = cin >> repetitions;
要求将 cin
复制到 inputSuccessful
。流的复制构造函数被删除,因此会出现错误。然而,复制或引用 cin
是没有意义的,因为无论你可以用引用做什么,你也可以直接用 cin
做。
您应该将变量设为 bool
:
bool inputSuccessful(cin >> repetitions);
现在 inputSuccessful
将包含 true
如果读取 repetitions
成功,否则 false
。 this Q&A.