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

标签 c++

我正在尝试在我的程序(*nix 机器 - Ubuntu 12.10,Codeblocks)中使用 log4cpp 在程序的不同实例中创建日志。

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"

主程序.h

#include "LoggerMain.h"

MainProgram{
public:
log4cpp::Appender *appender;
};

主程序.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|错误:“class MainProgram”中的“appender”没有命名类型|

怎么了?我基本上在做与 log4cpp 简单示例文档中相同的事情 here

最佳答案

函数外不能有操作,把下面代码放到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函数,你需要将main函数改为以下形式之一:

int main() { /* ... */ }

int main(int argc, char* argv[]) { /* ... */ }

关于c++ - 此类中的变量未命名类型 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14030359/

相关文章:

c++ - __cxa_pure_virtual 的目的是什么?

c++ - sqrt(1.0 - pow(1.0,2)) 返回 -nan

c++ - gdb 启动但不逐行执行

c++ - 二进制数据注入(inject)字符串

c++ - 根据 Cmake 中的条件包含目录

c++ - 如何从 ULONGLONG 毫秒创建 SYSTEMTIME 结构?

c++ - 如何将矩阵参数发送到 C++ 中的 main 函数

c++ - C++修改数组长度

c++ - 在未命名命名空间内使用外部链接初始化变量

c++ - 我们可以像在 C++ 中一样使用十六进制字节和字符吗?