0

友達の機能に問題があります。

これが必要なコードの唯一の部分だと思います。私の問題はこの関数にあります。問題は最初の行にあると書かれていますが、それがどれほど正確かはわかりません。

friend ostream & operator << (ostream & b, Book & a)
    {
    b.setf(ios::fixed | ios::showpoint);
    b.precision(2);
    b << "Title     :  \"" << a.title << "\"\n"
    << "Author      : \"" << a.author << "\"\n"
    << "Price       : $" << a.price / 100.0 << endl
    << "Genre       : " <<a.genre << endl
    << "In stock? " << (a.status ? "yes" : "no") << endl
    << endl;
    return b;
    }

エラーが発生します:lab10.cpp:95:エラー:フレンド関数âoperator<<âを初期化できません

lab10.cpp:95:エラー:フレンド宣言がクラス定義にありません

前もって感謝します

4

3 に答える 3

1

クラス内でフレンド関数のプロトタイプを作成していますか?これがフレンド関数であることを示す何かをクラス内に持つ必要があります。ラインのように

  friend ostream& operator<<(...);

か何か。詳細については、挿入/抽出演算子をオーバーロードするための完全な例を参照してください。

于 2011-11-04T03:15:10.950 に答える
1

関数がどのクラスのフレンドであるかを指定する必要があります。その関数をクラス宣言に入れます。

class Book{
...
  friend ostream & operator << (ostream & b, Book & a)
    {
    b.setf(ios::fixed | ios::showpoint);
    b.precision(2);
    b << "Title     :  \"" << a.title << "\"\n"
    << "Author      : \"" << a.author << "\"\n"
    << "Price       : $" << a.price / 100.0 << endl
    << "Genre       : " <<a.genre << endl
    << "In stock? " << (a.status ? "yes" : "no") << endl
    << endl;
    return b;
  }
};

もう1つの方法は、クラス内でそれを友達として宣言し、他の場所で定義することです。

class Book{
...
    friend ostream & operator << (ostream & b, Book & a);
};

..。

// Notice, there is no "friend" in definition!
ostream & operator << (ostream & b, Book & a)
    {
    b.setf(ios::fixed | ios::showpoint);
    b.precision(2);
    b << "Title     :  \"" << a.title << "\"\n"
    << "Author      : \"" << a.author << "\"\n"
    << "Price       : $" << a.price / 100.0 << endl
    << "Genre       : " <<a.genre << endl
    << "In stock? " << (a.status ? "yes" : "no") << endl
    << endl;
    return b;
}
于 2011-11-04T03:17:06.120 に答える
0
于 2012-01-20T11:18:43.427 に答える