-1

私はC++で>>and演算子をオーバーロードしようとしてきましたが、次のようになります。<<

Error    2    error LNK2019: unresolved external symbol "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,class ArrayStorage &)" (??5@YAAAV?$basic_istream@DU?$char_traits@D@std@@@std@@AAV01@AAVArrayStorage@@@Z) referenced in function _main    G:\Desktop\ACW\08227_ACW2_TestHarnessSolution\main.obj

私のやり方は次のとおりです。

//.h file
friend ostream& operator<<(ostream &sout, ArrayStorage &Astor);
friend istream& operator>>(istream &sin, ArrayStorage &Astor);

//cpp file
ofstream& operator<< (ofstream &sout, ArrayStorage &astor)
{
    astor.write(sout);
    return sout;
}

ifstream& operator>> (ifstream &sin, ArrayStorage &astor)
{
    astor.read(sin);
    return sin;
}

友人から、ヘッダーファイルの宣言から「友人」を削除してクラス外に移動するように言われましたが、それでも同じエラーが発生します。簡単なことかもしれませんが、何が機能していないのかわかりません。

4

1 に答える 1

7

宣言には、パラメータと戻り値のタイプistreamostream;があります。しかし、定義にはとがifstreamありofstreamます。

定義からsを削除するfと、すべて問題ないはずです。

宣言はfriendそのままで問題ありません(クラス定義内にあると仮定します)。それらは周囲の名前空間で関数を宣言します。ただし、readwriteが公開されている場合は、その場合は特権アクセスを必要としないため、友だちを解除することを検討してください。

于 2012-04-20T12:51:25.600 に答える