2016-05-07 19 views
0

>>演算子をオーバーロードしようとしています。私は過負荷のために以下のコードを書いて、メインでそれを使用しようとしました。私は "演算子なし" >> "これらのオペランドと一致する"とc2679のエラーがあります。私はインターネットを見渡しましたが、解決策を見つけることができませんでした。演算子のオーバーロード ">>"エラー

ここに私の演算子オーバーロードがあります。

friend istream& operator >> (istream &in, Polynomial &polynomial) 

{

in >> polynomial.e; 
    if (polynomial.e > 20) 
     throw "Bad Input!"; 

    polynomial.x = new double[polynomial.e]; 
    for (int i = 0; i < polynomial.e; i++) { 
     polynomial.x[i] = 0; 
     in >> polynomial.x[i]; 
    } 

    return in; 
} 

と主にこのコードで使用tryingto。

out << "poly 1" << endl; 
Polynomial *newPol1 = new Polynomial(); 
try { 
    cin >> newPol1; 
} 

catch (char* s) 
{ 
    cout << s << endl; 
} 

は、あなたが、その後

std::cin >> newPol1; 

std::cin >> (*newPol1); // dereference pointer 

を変更するには、ポインタを使用する必要がある場合は、ここでPolynomialを型へのポインタにstd::cinを使用しようとしている

+3

オペレータが '多項式ない' Polynomial'、* 'のために過負荷になっています。あなたのコードをポインタの使用をやめる方がずっと簡単になります –

答えて

1

新は必要ない:

Polynomial newPol1; 
try { 
    std::cin >> newPol1; 
} 
... 

それとも、本当に動的に割り当てられたオブジェクトその後、使用したいならば、それを解除し、参照します。

Polynomial *newPol1 = new Polynomial(); 
try { 
    std::cin >> (*newPol1); // notice the * 
} 
... 

注意する必要があります。

if (polynomial.e > 20) // If things go bad. 
         // in a stream it is more normal 
    throw "Bad Input!"; // to set the bad bit on the stream. 
         // You can set the stream to throw an 
         // exception if required. 

だから私が期待しているだろう:

if (polynomial.e > 20) { 
    in.setstate(std::iosbase::failbit); 
} 

を次に使用方法は次のとおりです。

if (std::cin >> newPol1) { 
    // it worked 
} 
else { 
    // it failed 
} 
2

ありがとうそれポインタを使用しないようにして、ちょうどよいでしょう、

Polynomial newPol1; 
std::cin >> newPol1; 
関連する問題