私はここで何か間違っていますが、わかりません。私はプログラムの出力が「タコス!」と期待していますが、代わりにメモリの場所を取得しています。(C++ 14)演算子<<スマートポインタのベクトルからオーバーロードが期待通りに機能しない
私はC++ 14の機能を使用しようとしています。このプログラムでは、スマートポインタを使用して、< <演算子をオーバーロードしようとしています。
tacoCalendarオブジェクトには、tacoCuesの初期化時に作成されるtacoTuesdaysオブジェクト用のベクトルスマートポインタがあります。 cout << month.my_tacoTuesdays.at(0).get();
行は、のtacoTuesdays
ベクトルの最初のスマートポインタの肩書きをfriend関数friend std::ostream& operator<<(std::ostream& os, const tacoTuesdays& tt);
に送信して、 "tacos!"返されてstd::cout
に送信されます。
コード:
#include <iostream>
#include <vector>
#include <string>
#include <memory>
class tacoTuesdays {
public:
tacoTuesdays(int i) {
_i = i;
}
friend std::ostream& operator<<(std::ostream& os, const tacoTuesdays& tt);
private:
int _i;
};
std::ostream& operator<<(std::ostream& os, const tacoTuesdays& tt) {
std::string str_out = "tacos!";
os << str_out;
return os;
}
typedef std::shared_ptr<tacoTuesdays> smart_tacoTuesdays_t;
class tacoCalendar {
public:
std::vector<smart_tacoTuesdays_t> my_tacoTuesdays;
tacoCalendar(int i) {
smart_tacoTuesdays_t tt(new tacoTuesdays(i));
my_tacoTuesdays.push_back(tt);
}
~tacoCalendar() {
}
private:
};
int main(int argc, char **argv) {
using namespace std;
tacoCalendar month(2);
cout << *month.my_tacoTuesdays.at(0).get();
return 0;
}
あなたは 'に.get()'のいずれか – povman
@povmanを必要としません:確かにあなたが望む結果を得るために
、あなたはこのように、
tacoTuesdays
のconst reference
を渡す必要があります! – ildjarnここで「auto * p =」とは何をしていますか? –