我想打一個類似的行爲有std::cout
:如何在C++中正確地重載「<<」運算符?
int a = 10, b = 15, c = 7;
MyBaseClass << "a = " << a << ", b = " << b << std::endl;
我嘗試實施一些事情我剛讀,但它不爲我工作。我想在一個類中實現operator
,我稱之爲MyBaseClass
。我嘗試這樣做:
class MyBaseClass {
private:
std::ostream someOut;
public:
// My first try:
std::ostream &operator<< (std::ostream &out, const std::string &message) {
}
// The second try:
std::ostream &operator<< (const std::string &message) {
someOut << message << std::endl;
return someOut;
}
void writeMyOut() {
std::cout << someOut.str()
};
};
當我編譯此,我得到:「叫‘MyBaseClass’的含蓄到刪除的默認構造函數」 - 什麼我需要做修復它?
OS X,Xcode,clang編譯器,都是最新的。
可能重複[C++初學者 - 「朋友」的功能和<<運算符重載:什麼是正確的方式來重載一個運算符的類?](http://stackoverflow.com/questions/2828280/c-beginner-friend-functions-and-operator-overloading-what-is-the-prope) – Joel
我覺得你的第二個嘗試應該工作,或多或少。編譯錯誤可能是因爲'MyBaseClass'沒有構造函數,但你需要初始化'someOut'成員。 (我並不是100%確定這是問題所在,但是如果你爲'MyBaseClass'提供了一個構造函數,我想你會進一步得到一些東西。具體來說,我認爲你會花費足夠的時間來嘗試寫入未初始化的'std :: ostream'叫做'someOut'。) –
@DaveM。 - 如果我添加一個空的構造函數,我得到:'類型'std :: ostream'的字段(又名'basic_ostream')保護了默認的構造函數' –
JavaRunner