私はstd :: stringを代入に使用できないため、私は自分で初期化できないケースのラッパーとしてCharStringというカスタムクラスを使用しています。私はそれを>>使用したいとき、私は次のエラーを取得するしかしオペレータ>> charポインタラッパーの場合
struct CharString {
char* str;
CharString() : str() {} // Initialize NULL
~CharString() { free(str); }
// Conversions to be usable with C functions
operator char**() { return &str; }
operator char*() { return str; }
};
:
クラスは次のようになります。
binary '>>': no operator found which takes a right-hand operand of type 'utils::CharString' (or there is no acceptable conversion).
オペレータをどのようにオーバーロードできますか>>
?
CharString operator>>(std::istream& is) {
is >> str;
return *this;
};
私は上記を試みましたが、それでも私には同じエラーが表示されます。
私はこれを私のCharString構造体に配置する必要があると仮定しますが、これは私にもエラーを与えます:istreamのみを使うとき ''戻り値の型だけで区別される関数を多重定義できません。 。 – IMarks
これはメンバ関数ではなくfriend関数でなければなりません。あなたのクラスの外にそれを宣言して、クラスの中でそれのための友人宣言を追加してください。 – templatetypedef