Ich mache hier etwas falsch, aber ich bin mir nicht sicher, was. Ich erwarte, dass die Ausgabe des Programms "Tacos!" Ist, aber ich bekomme stattdessen einen Speicherort.(C++ 14) Operator << überladen funktioniert nicht wie erwartet aus Vektor von Smart-Zeigern
Ich versuche, C++ 14 Funktionen zu verwenden. In diesem Programm versuche ich, intelligente Zeiger zu verwenden und den Operator < < zu überlasten.
Ein TacoCalendar-Objekt enthält einen Vektor-Smart-Pointer für TacoTuesdays-Objekte, von denen eines bei der TacoCalendar-Initialisierung erstellt wird. Die cout << month.my_tacoTuesdays.at(0).get();
Zeile sollte den Zeiger des ersten intelligenten Zeigers des Vektors tacoTuesdays
in month
an die Freundesfunktion friend std::ostream& operator<<(std::ostream& os, const tacoTuesdays& tt);
senden, was zu "Tacos!" zurückgegeben und an std::cout
gesendet werden.
Code:
#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;
}
Sie nicht brauchen die' .get() 'entweder – povman
@povman: In der Tat! – ildjarn
Was macht "auto * p =" als Bedingung? –