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