此类中的变量未命名类型C ++

时间:2012-12-25 11:48:48

标签: c++

我正在尝试在我的程序中使用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

中做的一样

3 个答案:

答案 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");