1

プログラム (* nix マシン - Ubuntu 12.10、コードブロック) で 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"

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|エラー: 'class MainProgram' の 'appender' に型の名前がありません|

何がうまくいかないのですか?私は基本的にlog4cppの簡単な例のドキュメントhereと同じことをしています

4

3 に答える 3

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++ は 2 つの形式のメイン関数をサポートしているため、メイン関数を以下の形式のいずれかに変更する必要があることに注意してください。

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

int main(int argc, char* argv[]) { /* ... */ }
于 2012-12-25T11:58:09.780 に答える
1

関数の外にコード ステートメントを含めることはできません。これはおそらくクラスコンストラクター内にあるはずですか?

コンパイラは、型で始まる宣言を期待しています。appenderタイプではないと言われています。

于 2012-12-25T11:55:15.770 に答える
0

のインスタンスを作成していないようですMainProgram。これらの行に沿って何かを試してください:

MainProgram mp;
mp.appender = new log4cpp::FileAppender("default","program.log");
于 2012-12-25T11:55:57.257 に答える