1

私はC++に戻ろうとしていますが、これは久しぶりの2番目のプログラムです。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クラスに関する詳細です。オペレーターを使用して入力ストリームから 1 つを読み取るには、クラス>>に対して定義する必要がありますoperator>>(多くの場合、ストリーム エクストラクターと呼ばれます)。それが、あなたが得ているコンパイルエラーの意味です。

基本的に、必要なのは次のような関数です。

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