如何声明和定义Poco Logger?

How to declare and define Poco Logger?

我使用优秀的 Poco 框架进行日志记录。目前,我在头文件中这样定义 Logger 和 LogStream:

#Foo.h

....

class Foo
{
    private:
        Poco::Logger &logger = Poco::Logger::get("Foo");
        Poco::LogStream logStream{ logger };

}; 

在我开始使用 boost::di 之前,它一直很好用。当我像这样使用 boost 注入器为 Foo 创建一个对象时,

injector.create<Foo>();

我收到一个编译器错误提示,

attempting to reference a deleted function

但是,如果我删除 LogStream 定义,则不会出现编译器错误。是否可以在header中声明LogStream而不定义它?我是 C++ 的新手,如果有人能指出我在这里做错了什么以及如何正确做,我会很高兴。非常感谢。

无法复制 Foo 的实例,原因有二:

1) logger是引用,引用必须在创建Foo时初始化,所以只有这样 要做到这一点是使用构造函数。 编译器无法生成复制赋值操作。所以 Foo f1,f2; f1 = f2; 无法工作。

2) LogStream 的基 class 是 std::ostream,它禁用了复制操作。

解决方法: 删除 logger 作为数据成员,这里是多余的, 因为我们可以在初始化 LogStream 时调用 Poco::Logger

class Foo {
    //...
    Poco::SharedPtr<Poco::LogStream> logStream{
        new Poco::LogStream(Poco::Logger::get("Foo"))};
};

要使 Foo 可复制,您可以使用 Poco::SharedPtr.