私はEOF
まで、ユーザーからの入力を読み込み、書店のプログラムを作成しようとしているのオーバーロード。それを行うために、私はistream >> operator
をとりわけオーバーロードしました。参照-渡されたポインタ
class CSales {
public:
//constructors
friend ostream & operator << (ostream &os, const CSales &x) const;
friend istream & operator >> (istream &is, const CSales &x);
//m_vars
};
istream & operator >> (istream &is, const CSales &x) {
/* following line prints error:
* no match for 'operator>>' */
if (is >> x.m_isbn >> x.m_price >> x.m_count) {
x.m_revenue = x.m_count*x.m_price; //assignment of member is read-only object
}
return is;
}
int main() {
vector<CSales*> dbs1;
CSales *candidate = new CSales();
while (cin >> *candidate) {
//sorted by isbn
auto iter = lower_bound(dbs1.begin(), dbs1.end(), candidate, cmp_isbn);
//operations
return 0;
}
私は、参照を使用してポインタを渡すためにしようとしているので、過負荷が動作していないという疑いを持っています。私はその前提で正しいのでしょうか?
私がそれを理解したように、
const CSales x
は私が指しているオブジェクトではなくポインタを変更するので間違っています。だから、おそらくどちらかconst CSales &*x
またはconst CSales *&x
のいずれかで私を残します。これら2つの違いは何ですか?x.m_revenue
行が機能しない理由がわかりません。私はconst
という演算子を持っていないと、なぜ読み取り専用になりますか?
EDIT:それはより効率的に(のみ移動ポインタではなく、オブジェクト自体)をソートするべきであるので、私はオブジェクトへのポインタのベクトルを使用しています。ここで
注意。したがって、出力演算子に 'const'指定子を付けることはできません。それはあなたにビルドエラーを与えるでしょう。 –
あなたのエラーについては、入力演算子*がオブジェクト 'x'を変更します。私。 'const'にすることはできません。 –
私の 'ostream'は' const'を持ってはいけないが、 'istream'に' const'はありません。 –