1

表示機能が動作しない理由がわかりません。私のcout声明は次のようなことを述べています

no match for operator << in std :: cout<<n->movieinventory::movienode::m

何か案は?

class MovieInventory
{
 private:
 struct MovieNode          // the Nodes of the linked list
  {
     Movie m;              // data is a movie
     MovieNode *next;      // points to next node in list
  };

  MovieNode *movieList;    // the head pointer

  bool removeOne(Movie);   // local func, used by sort and removeMovie

  public:
  MovieInventory();

  bool addMovie(Movie);
  int removeMovie(Movie);
  void showInventory();
  Movie findMinimum();   // should be private, but public for testing
  void sortInventory();

  int getTotalQuantity();
  float getTotalPrice();

};

表示コード:

void MovieInventory::showInventory()
{

MovieNode *n;

    for (n = movieList; n != NULL; n = n->next)
    cout <<  n->m;
}
4

1 に答える 1

4

データメンバーはクラスmに属しています。with演算子Movieは、int、char、floatなどの組み込みデータ型に対してのみオーバーロードされます。したがって、ユーザー定義のデータ型のオブジェクトは出力されません。そのためには、独自のクラスの演算子をオーバーロードする必要があります。cout<< <<

opeator <<をオーバーロードしたくない場合は、Movieクラスのデータメンバーが公に宣言されていれば、この方法で1つずつ出力する必要があります。

cout << n->m.var1 ;
cout << n->m.var2 ;

Movieクラスのデータメンバーがプライベートの場合、そのためのゲッター関数を作成する必要があります。

cout << n->m.getvar1() ;
cout << n->m.getvar2() ;
于 2012-11-25T06:36:16.147 に答える