错误:不匹配'operator>>'在'std :: cin>> STOPAT”

时间:2012-02-09 23:29:51

标签: c++ operators no-match

我正在尝试重新使用C ++,这是我很久以来的第二个程序。所有东西都编译得很好,直到它到达cin >> stopat;,它返回一个看似相当常见的错误:error: no match for 'operator>>' in 'std::cin >> stopat' 我已经查看了一些解释导致这种情况的原因,但实际上我没有理解(由于我在编程方面的经验相对较少)。导致此错误的原因是什么,如果我再次碰到它,我该如何解决?

#include <iostream>
#include "BigInteger.hh"

using namespace std;

int main()
{
    BigInteger A = 0;
    BigInteger  B = 1;
    BigInteger C = 1;
    BigInteger D = 1;
    BigInteger stop = 1;
    cout << "How Many steps? ";
    BigInteger stopat = 0;
    while (stop != stopat)
    {
        if (stopat == 0)
        {
            cin >> stopat;
            cout << endl << "1" << endl;
        }
        D = C;
        C = A + B;
        cout << C << endl;
        A = C;
        B = D;
        stop = stop + 1;
    }
    cin.get();
}

编辑:不知何故,我没想到链接引用的库。它们是:https://mattmccutchen.net/bigint/

2 个答案:

答案 0 :(得分:2)

您还没有向我们展示BigInteger的代码,但是需要定义一个函数(在BigInteger.hh或您自己的代码中),如下所示:

std::istream& operator >>(std::istream&, BigInteger&);

需要实现此函数以实际从流中获取“单词”并尝试将其转换为BigInteger。如果你很幸运,BigInteger将有一个带字符串的构造函数,在这种情况下它会是这样的:

std::istream& operator >>(std::istream& stream, BigInteger& value)
{
    std::string word;
    if (stream >> word)
        value = BigInteger(word);
}

编辑现在你已经指出了正在使用的库,这是你可以做的。库本身应该可以为你做这个,因为它提供了相应的ostream操作符,但是如果你看一下,你会看到通用的,库质量的流操作符比我在这里写的更复杂。

#include <BigIntegerUtils.hh>

std::istream& operator >>(std::istream& stream, BigInteger& value)
{
    std::string word;
    if (stream >> word)
        value = stringToBigInteger(word);
}

答案 1 :(得分:0)

您在此处遗漏的是有关BigInteger课程的详细信息。要使用>>运算符从输入流中读取一个,您需要为您的类定义operator>>(通常称为流提取器)。这就是你得到的编译器错误意味着什么。

基本上,你需要的是一个看起来像这样的函数:

std::istream &operator>>(std::istream &is, BigInteger &bigint)
{ 
    // parse your bigint representation there
    return is;
}