(C 14)操作员<<超负荷无法正如智能指针向量所预期的那样工作
(c++14) operator<< overloading not working as expected from vector of smart pointers
我在这里做错了什么,但是我不确定。我希望该程序的输出是"炸玉米饼!",但我会得到一个内存位置。
我正在尝试使用C 14个功能。在此程序中,我试图使用智能指针并超载&lt;&lt;操作员。
一个tacocalendar对象具有用于tacotuesdays对象的矢量智能指针,其中一个是在tacocalendar的初始化上创建的。cout << month.my_tacoTuesdays.at(0).get();
行应获得month
中tacoTuesdays
向量的第一个智能指针的指尖,向朋友函数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<<
Overload(正确)采用参考而不是指针。
更改
cout << month.my_tacoTuesdays.at(0).get();
to
cout << *month.my_tacoTuesdays.at(0);
或任何shared_ptr
实例可以为null,
if (auto* p = month.my_tacoTuesdays.at(0).get()) {
cout << *p;
}
请注意cout
的类型:
cout << month.my_tacoTuesdays.at(0).get();
它正在打印std::vector<std::shared_ptr<tacoTuesdays>>::at(0).get(0)
,即指针tacoTuesdays*
,因此cout
为您打印原始指针地址。
要获得想要的东西,您应该通过tacoTuesdays
的const reference
,这样:
cout << *month.my_tacoTuesdays.at(0);
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 变量没有改变?通过向量的函数调用
- 迭代时从向量和内存中删除对象
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 呼叫运营商<<临时
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- 如何加入向量&lt; int&gt;到C 中的单个INT
- (C 14)操作员&lt;&lt;超负荷无法正如智能指针向量所预期的那样工作
- 如何过载<<用于YAML::Emitter的运算符,以序列化包含另一个自定义类的向量的自定义类