重载ostream <>

问题描述 投票:0回答:1

我在重载ostream运算符时遇到了一些麻烦。有3个类,抽象基类Packet另一个继承自Packet的抽象类Sequence和类TimeHistory继承自Sequence的类。]

class Packet
{
//some stuff
};

template <typename T = double>
class Sequence : public Packet
{
std::vector<T> buffer;
//some other stuff
}

template <typename T = double>
class TimeHistory : public Sequence<T>
{
template <typename X>
    friend std::ostream &operator<<(std::ostream &out, Packet *A);
//another stuff
}

还有一个用于在对象中打印数据的朋友功能

std::ostream &operator<<(std::ostream &out, Packet *A)
{
    TimeHistory<T> *th = dynamic_cast<TimeHistory<T> *>(A);
    out << th->device
        << th->description
        << th->channelNr;
    for (auto in : th->buffer)
        out << in << std::endl;
    return out;
} 

当我创建类的实例时:

std::unique_ptr<Packet> channel1 = std::make_unique<TimeHistory<double>>(/*some constructor stuff*/);

并调用函数

  std::cout<<(channel1.get());

我在输出中仅得到一个存储单元地址:0x560c8e4f1eb0有人可以指出我在做什么错吗?

我在重载ostream运算符时遇到了一些麻烦。有3个类,抽象基类Packet另一个继承自Packet的抽象类,以及TimeHistory类,它继承了...

c++ pointers reference operator-overloading abstract-class
1个回答
0
投票

std::unique_ptr::get将返回一个指向托管对象的指针。如果您想获得管理价值的参考,请使用

std::unique_ptr::get
© www.soinside.com 2019 - 2024. All rights reserved.