我正在尝试在我的程序中使用log4cpp(* nix机器--Ubuntu 12.10,Codeblocks)在程序中的各种实例中创建日志。
LoggerMain.h
#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"
MainProgram.h
#include "LoggerMain.h"
MainProgram{
public:
log4cpp::Appender *appender;
};
MainProgram.cpp
appender = new log4cpp::FileAppender("default","program.log"); //getting error here
appender->setLayout(new log4cpp::BasicLayout());
log4cpp::Category& root = log4cpp::Category::getRoot();
main{
//will use root here for loggin
}
错误: src / MainProgram.cpp | 21 |错误:'类MainProgram'中的'appender'未命名类型|
出了什么问题?我基本上和log4cpp简单示例文档here
中做的一样答案 0 :(得分:2)
你不能在函数之外进行操作,将下面的代码放入MainProgram构造中,
MainProgram::MainProgram(){
appender = new log4cpp::FileAppender("default","program.log"); //getting error here
appender->setLayout(new log4cpp::BasicLayout());
log4cpp::Category& root = log4cpp::Category::getRoot();
}
您可以对MainProgram使用单例模式
MainProgram{
public:
MainProgram* instance(){
if (!instance){
instance = new MainProgram();
return instance;
}
}
MainProgram()
{
appender = new new log4cpp::FileAppender("default","program.log"); //getting error here
appender->setLayout(new log4cpp::BasicLayout());
}
private:
log4cpp::Appender *appender;
MainProgram* instance;
};
int main(int argc, char* argv[])
{
MainProgram::Instance();
}
注意,C ++支持两种形式的主要功能,您需要将main函数更改为以下形式之一:
int main() { /* ... */ }
和
int main(int argc, char* argv[]) { /* ... */ }
答案 1 :(得分:1)
您不能在函数之外使用代码语句。这可能应该在类构造函数中?
编译器期待一个声明,它将以一个类型开头。它说appender
不是一种类型。
答案 2 :(得分:0)
您似乎没有创建MainProgram
的实例。尝试以下几点:
MainProgram mp;
mp.appender = new log4cpp::FileAppender("default","program.log");