这个问题可能会因为它过于简单而被否决 - 但我不确定我应该为这些类型的对象遵循的模式。
我想在一个类中存储一个 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)似乎表明我在这里所做的是正确的。
我想我在这里搞砸了我对指针的理解(为什么我通过 & 传递地址而不是通过间接传递指针)。有人可以向我解释如何解决这个问题/我哪里出错了?
谢谢!