C++初心者です。
ほぼ触ったことがないので、細かい部分も教えていただきたいです。
C++を使用して試しにログを出力するプログラムを作成しています。
ソースをコンパイルすると以下2種類のエラーが出ます。
①error LINK2001: 外部シンボル""public: static class log4cpp::Category & Log::sub3"(?sub3@Log@@2AAVCategory@log4cpp@@A)"は未解決です。
②IntelliSense: "Log::Log()"(宣言された行8、ファイル名"プロジェクトフォルダ\Log.h"にアクセスできません。
①について
調べたところ、定義がない場合に発生するといったものを見つけることは
出来たのですが、Log.cppに定義しているのにも発生しているため、他にどのような
ことが考えられるか教えていただけないでしょうか。
尚、ここで実施したいことは、Logクラスで定義しているsub1,sub2,sub3のメンバに
取得したカテゴリのインスタンスを取得して保持したいのが目的です。
②について
Logクラスのコンストラクタがprivateになっているためpublicにするとメッセージ自体は
解消されますが、privateのままで他に解消する方法はありますでしょうか。
以下にソースを貼り付けますのでご教授頂けますでしょうか。
■ConsoleApplication4.cpp
C++
1#include "stdafx.h" 2#include "Log.h" 3 4int _tmain(int argc, _TCHAR* argv[]) 5{ 6 std::string initFileName; 7 initFileName = "log4cpp.properties"; 8 9 Log* logInstance = new Log(); 10 11 log4cpp::Category& sub1 = logInstance->getErrorFatalLogger(); 12 log4cpp::Category& sub2 = logInstance->getInfoWarnLogger(); 13 log4cpp::Category& sub3 = logInstance->getDebugLogger(); 14 15 printer::logging(sub1 , true); 16 printer::logging(sub2 , true); 17 printer::logging(sub3 , true); 18 19 log4cpp::Category::shutdown(); 20 21 getchar(); 22 return 0; 23}
■Log.h
C++
1#pragma once 2#include<log4cpp/Category.hh> 3#include<log4cpp/PropertyConfigurator.hh> 4 5class Log 6{ 7private: 8 Log(); 9public: 10 ~Log(); 11 ///ログ出力に関する設定ファイルのファイル名 12 const std::string PROPATIES_FILE_NAME = "log4cpp.properties"; 13 14 const std::string CATEGORY_ERROR = "sub1"; 15 const std::string CATEGORY_INFO = "sub1.sub2"; 16 const std::string CATEGORY_DEBUG = "sub1.sub2.sub3"; 17 18 static log4cpp::Category& root; 19 static log4cpp::Category& sub3; 20 static log4cpp::Category& sub2; 21 static log4cpp::Category& sub1; 22 23 static log4cpp::Category& getInfoWarnLogger(); 24 static log4cpp::Category& getErrorFatalLogger(); 25 static log4cpp::Category& getDebugLogger(); 26 static log4cpp::Category& getPerformanceLogger(); 27 28 static void Logger(CATEGORY cat, std::string message); 29}; 30
■Log.cpp
C++
1#include "stdafx.h" 2#include "Log.h" 3Log::Log() 4{ 5 log4cpp::PropertyConfigurator::configure(PROPATIES_FILE_NAME); 6 log4cpp::Category& sub3 = log4cpp::Category::getInstance(CATEGORY_DEBUG); 7 log4cpp::Category& sub2 = log4cpp::Category::getInstance(CATEGORY_INFO); 8 log4cpp::Category& sub1 = log4cpp::Category::getInstance(CATEGORY_ERROR); 9} 10Log::~Log() 11{ 12} 13///DDEBUGのログ出力に使用 14log4cpp::Category& Log::getDebugLogger() 15{ 16 return Log::sub3; 17} 18///INFOおよびWARNのログ出力に使用 19log4cpp::Category& Log::getInfoWarnLogger() 20{ 21 return Log::sub2; 22} 23///ERRORおよびFATALのログ出力に使用 24log4cpp::Category& Log::getErrorFatalLogger() 25{ 26 return Log::sub1; 27} 28//パフォーマンスのログ出力に使用 29log4cpp::Category& Log::getPerformanceLogger() 30{ 31 return Log::sub3; 32} 33}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/23 06:27
2017/01/23 06:43
2017/01/23 08:11
2017/01/23 08:49
2017/01/24 02:55