错误C2678:二进制'>>' :找不到哪个运算符采用类型为'std :: basic_istream< _Elem,_Traits>'的左手操作数

时间:2014-01-05 16:11:09

标签: c++

我得到了这个奇怪的错误。我想我已经包含了所有必要的文件。什么可能导致这个? 该错误是由以下行引起的:

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

5 个答案:

答案 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)

cinistream类型的对象。此类已将操作符>>重载到从控制台获取输入并将值放入给定变量中。变量必须是l值,而不是r值。简而言之,>>右侧给出的表达式必须是可写变量。

这不起作用:

const int x;
cin >> x;

只是因为xconst 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;
}