c++ - 我不断收到此错误:无法绑定 'std::ostream {aka std::basic_ostream}' 左值到 'std::basic_ostream&&'
问题描述
所以我在这里阅读了很多关于这个错误的答案,但我仍然对错误和发生的事情感到非常困惑。所以我有这段代码,我现在有两个函数,要求输入 2 个字母和 2 个数字。我得到的错误在 switch 语句中,它显示“std::cout<<letter1;” “std::cout<<letter1;”、“std::cout<<num1;”、“std::cout<<num2;”。这是我的代码。
#include <iostream>
#include <string>
#include <iomanip>
#include <cctype>
#include <stdexcept>
#include <limits>
using namespace std;
//overloaded input functions
char input(const std::string& prompt, const std::string& error);
double input(double max_num, double min_num, const string& prompt, const string& error_text);
int main() {
cout << "Display the function between two items: letters, numbers, points.\n";
char options {};
do {
cout << "Options: l)etter; n)umber; p)oint; q)uit: ";
cin >> options;
options = static_cast<char>(std::tolower(static_cast<unsigned char>(options)));
switch (options) {
case 'l':
{
const string error {"Sorry, out of range. Try again."};
const auto letter1 {input("Enter first letter (a to z): ", error)};
std::cout<<letter1;
const auto letter2 {input("Enter second letter(a to z): ", error)};
std::cout<<letter2;
}
break;
case 'n':
{
const string error_text {"Sorry, out of range. Try again."};
const auto num1 {input(100, -100, "Enter first number (100 to -100): ", error_text)};
std::cout<<num1;
const auto num2 {input(100, -100, "Enter second number (100 to -100): ", error_text)};
std::cout<<num2;
}
break;
case 'q':
break;
default:
std::cout << "Invalid option\n";
break;
}
} while (options != 'q');
}
char input(const std::string& prompt, const std::string& error_message) {
char letter {};
while ((std::cout << prompt) && (!(std::cin >> letter) || !std::isalpha(letter))) {
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << error_message << '\n';
}
return letter;
}
double input(double max_num, double min_num, const string& prompt, const std::string& error_text) {
double num {};
do {
std::cout << prompt;
if ((std::cin >> num) && (num >= min_num) && (num <= max_num) && std::isspace(std::cin.peek())) {
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
return num;
}
std::cout << error_text << '\n';
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
} while (true);
}
解决方案
推荐阅读
- c# - 我可以使用 InkManager.RecognizeAsync 来识别数学公式吗?
- python-3.x - 在python3.6中反转字符数组
- python - Python Yahoo-Finance Try-Except with Continue for Problem Tickers in a List
- c# - LINQ where 子句中的 DateTime 属性错误
- jquery - jQuery 仅在 Rails 站点上本地工作
- visual-studio - 我只能在 HoloLens 上部署 1 个 Unity 应用
- java - java中添加二维数组的方法向量的问题
- php - 我想根据员工姓名打印负责人的姓名
- python - 去序列化二叉搜索树
- python - 有没有办法继承指向类自己的私有变量的方法?