私は本当にこれに頼りたくありませんでしたが、コードがコンパイルされない理由(gcc)については文字通りわかりません(「テンプレート引数の推定/置換に失敗しました」など)
エラーメッセージ:
error: no match for 'operator<<' (operand types are 'std::basic_ostream<char>' and 'const EAN_code')
ヘッダーファイル
#ifndef HEADER_H
#define HEADER_H
using namespace std;
#include <iostream>
class EAN_code {
int ean_code;
};
class Order_item {
EAN_code item_number;
unsigned qty;
public:
Order_item(const EAN_code&, unsigned);
ostream& print(ostream&) const;
};
ostream& operator<<(ostream&, const Order_item);
#endif
ソースファイル
#include "header.h"
Order_item::Order_item (const EAN_code& code, unsigned qty) : item_number{code}, qty{qty} {}
ostream& Order_item::print(ostream& o) const {
return o << qty << " x " << item_number;
}
ostream& operator<<(ostream& o, const Order_item i) {
return i.print(o);
}
問題はここにあります:
return o << qty << " x " << item_number;
具体的には:
<< item_number
item_numberはタイプでEAN_code
あり、operator<<
オーバーロードを指定していません。すでに行ったことと同様のパターンを使用しますOrder_item
質問のタイトルを「C ++ストリーミング演算子のエラーを見つける方法」のようなものに変更することをお勧めします。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加