0

这个问题可能会因为它过于简单而被否决 - 但我不确定我应该为这些类型的对象遵循的模式。

我想在一个类中存储一个 log4cpp 记录器的实例,所以我只需要实例化一次。在我看来,这将帮助我保持代码整洁。

想象一下,我有这样的课程:

#include <log4cpp/Category.hh>
#include <log4cpp/Appender.hh>
#include <log4cpp/FileAppender.hh>
#include <log4cpp/OstreamAppender.hh>
#include <log4cpp/Layout.hh>
#include <log4cpp/BasicLayout.hh>
#include <log4cpp/Priority.hh>

class ExampleClass {
private:
    log4cpp::Category& logger;

public:
    ExampleClass();
   ~ExampleClass();
}

通过实施:

ExampleClass::ExampleClass() {
    log4cpp::Appender *appender1 = new log4cpp::OstreamAppender("console", &std::cout);
    appender1->setLayout(new log4cpp::BasicLayout());

    log4cpp::Appender *appender2 = new log4cpp::FileAppender("default", "output.log");
    appender2->setLayout(new log4cpp::BasicLayout());

    logger = log4cpp::Category::getRoot();
    logger.setPriority(log4cpp::Priority::WARN);
    logger.addAppender(appender1);
    logger.addAppender(appender2);

}

根据文档(http://log4cpp.sourceforge.net/#simpleexample),该函数log4cpp::Category::getRoot()返回一个log4cpp::Category&. 所以很自然地我想存储这个(如上所示)。

不幸的是,这不起作用。我从我的 IDE 中收到以下错误:operator = is a private member of log4cpp::Category. 现在我意识到我已经过头了。我很困惑,特别是考虑到类文档(http://log4cpp.sourceforge.net/api/classlog4cpp_1_1Category.html)似乎表明我在这里所做的是正确的。

我想我在这里搞砸了我对指针的理解(为什么我通过 & 传递地址而不是通过间接传递指针)。有人可以向我解释如何解决这个问题/我哪里出错了?

谢谢!

4

0 回答 0