我得到了这个奇怪的错误。我想我已经包含了所有必要的文件。什么可能导致这个? 该错误是由以下行引起的:
cin >> x >> "\n" >> y >> "\n";
以下是代码:
#ifndef ARITMETICE_H
#define ARITMETICE_H
#include <iostream>
#include <string>
#include "UI\comanda.h"
using namespace Calculator::Calcule;
namespace Calculator{
namespace UI{
template<int Operatie(int, int)>
class CmdAritmetice : public ComandaCalcule
{
public:
CmdAritmetice(const string &nume) : ComandaCalcule(nume)
{
}
void Execute()
{
cout << Nume() << "\n";
cout << "Introduceti doua numere intregi (x, y)\n";
int x, y;
cin >> x >> "\n" >> y >> "\n"; // here a get the error
cout << x << " " << Nume() << " " << y << " = " << Operatie (x,y) <<"\n";
}
};
}
}
#endif
答案 0 :(得分:3)
问题是cin >> "\n"
。它声称将用户输入读入字符串文字,这没有任何意义。只需删除它,将其设为cin >> x >> y;
答案 1 :(得分:1)
当您尝试将数据从流提取到字符串文字时,不确定您预期会发生什么!
答案 2 :(得分:0)
cin&gt;&gt;必须在右边有一个可写变量, 您的 CIN&GT;&gt; “中\ n” 个 将cin重定向到const char *类型,这是只读的
总之,只需使用cin&gt;&gt; x&gt;&gt; Ÿ;而iostream将为你做其余的事。
答案 3 :(得分:0)
cin
是istream
类型的对象。此类已将操作符>>
重载到从控制台获取输入并将值放入给定变量中。变量必须是l值,而不是r值。简而言之,>>
右侧给出的表达式必须是可写变量。
这不起作用:
const int x;
cin >> x;
只是因为x
是const int&
,而不是int&
istream::operator>>(int&)
所期望的。
当你打电话时,这样走得更远:
cin >> "\n";
您实际上是在调用operator >> (const char*)
而不是operator >> (char*)
,因此错误。由于operator>>
和模板代码的多次重载,因此错误不明确。
注意:operator >>
的确切签名可能有所不同,但问题与常量有关。
答案 4 :(得分:0)
如果您的目的是消耗空格和一个新行字符(请注意新行表示的风格),您可能会编写一个操纵器
#include <cctype>
#include <iostream>
#include <sstream>
std::istream& nl(std::istream& is) {
typedef std::istream::traits_type traits;
while(true) {
traits::int_type ch;
if(std::isspace(ch = is.get())) {
if(ch == '\n') break;
}
else {
is.putback(ch);
// No space and no '\n'
is.setstate(std::ios_base::failbit);
break;
}
}
return is;
}
int main()
{
std::istringstream s("1\n2");
int x, y;
s >> x >> nl >> y >> nl;
std::cout << x << ' ' << y << '\n';
if(s.fail()) {
// The missing '\n' after '2'
std::cout <<"Failure\n";
}
return 0;
}