我在这里做错了,但是我不确定。我希望程序的输出为“ tacos!”,但是我却获得了一个内存位置。
我正在尝试使用C ++ 14功能。在此程序中,我尝试使用智能指针并使<
一个tacoCalendar对象持有一个tacoTuesdays对象的矢量智能指针,其中的一个是在tacoCalendar的初始化上创建的。 cout << month.my_tacoTuesdays.at(0).get();
行应将tacoTuesdays
中month
向量的第一个智能指针的指针发送给好友函数friend std::ostream& operator<<(std::ostream& os, const tacoTuesdays& tt);
,从而导致“炸玉米饼!”。返回并发送到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;
}
最佳答案
std::shared_ptr<T>::get()
返回一个T*
,但是您的operator<<
重载(正确)采用了引用而不是指针。
更改
cout << month.my_tacoTuesdays.at(0).get();
至
cout << *month.my_tacoTuesdays.at(0);
或者,如果任何
shared_ptr
实例可以为null,if (auto* p = month.my_tacoTuesdays.at(0).get()) {
cout << *p;
}
关于c++ - (c++ 14)operator <<重载无法按智能指针 vector 的预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38045343/