1

我正在尝试重新使用 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/

4

2 回答 2

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);
}
于 2012-02-09T23:35:29.587 回答
0

您在这里遗漏的是有关您的BigInteger课程的详细信息。为了使用>>操作符从输入流中读取一个,您需要operator>>为您的类定义(通常称为流提取器)。这就是您得到的编译器错误的含义。

本质上,您需要的是一个如下所示的函数:

std::istream &operator>>(std::istream &is, BigInteger &bigint)
{ 
    // parse your bigint representation there
    return is;
}
于 2012-02-09T23:39:07.033 回答