独自のstd :: stringラッパーを作成して機能を拡張しようとしています。 しかし、< <演算子を宣言するときに問題が発生しました。 はここで、これまでに私のコードです:C++のカスタム文字列クラスの<<演算子関数の戻り値
私のカスタム文字列クラス:
class MyCustomString : private std::string { public: std::string data; MyCustomString() { data.assign(""); } MyCustomString(char *value) { data.assign(value); } void Assign(char *value) { data.assign(value); } // ...other useful functions std::string & operator << (const MyCustomString &src) { return this->data; } };
メインプログラム:私はそのようにはstd ::文字列としてクラスを扱うためにはcoutたかっ
int main() { MyCustomString mystring("Hello"); std::cout << mystring; // error C2243: 'type cast' : conversion from 'MyCustomString *' to 'const std::basic_string<_Elem,_Traits,_Ax> &' exists, but is inaccessible return 0; }
私は次のようなことをする必要はありません:
std::cout << mystring.data;
何か助けていただければ幸いです!
ありがとうございました。
ただfyi:私のIDEはMicrosoft Visual C++ 2008 Express Editionです。
私は追加している:あなたは新しい文字列クラスを実装していて、それが
std::cout
を使用して出力することができるようにしたい、あなたはstd::cout
を期待文字列データを返すために、キャスト演算子が必要になりますと仮定他の答えには、自立型(グローバル関数)が必要なのは、最初の引数の型が 'std :: string'か、' << '演算子の前に持ちたい型にする必要があるからです。 – Skurmedel
...これは、実際のstd :: stringクラスを変更することなく、そのような演算子を提供する唯一の方法です。 – Skurmedel