<分区>
我知道,SO上已经有很多类似的问题和解决方案,我也看了,但没有一个能帮助我解决我的问题。
我创建了一个日志类。
这是 Logger.h
#ifndef LOGGER_H
#define LOGGER_H
namespace Logger
{
namespace debug
{
int Error = 0, OtherNumber;
class log
{
public: // Methods
void Save();
private: // Members
static int indentation;
const std::wstring context;
int Type, LineNumber;
public: // Constructor, Destructor
log( const std::wstring& context, int LineNumber, int Type );
~log();
};//class log
}//namespace debug
}//namespace Logger
#endif //LOGGER_H
Logger.cpp
#include "stdafx.h"
#include "Logger.h"
namespace Logger
{
namespace debug
{
log::log( const std::wstring& ctx, int linenr, int type ): context( ctx ), LineNumber( linenr ), Type( type )
{
printf("\nLogging start! Context = %ls - Line = %d - Type = %d", context.c_str(), LineNumber, Type );
}
log::~log()
{
printf( "\nLogging end! Context = %ls - Line = %d - Type = %d", context.c_str(), LineNumber, Type );
printf( "\nUsing Error here =%d", Error );
}
void log::Save()
{
FILE *fp = NULL;
fclose( fp );
fp = fopen( "mylogfile.log", "a" );
}
}//namespace debug
}//namespace Logger
然后在 main.h
我有:
#ifndef MYAPP_H
#define MYAPP_H
#include "Logger.h"
#define WIDEN2( x ) L ## x
#define WIDEN( x ) WIDEN2( x )
#define WFILE WIDEN( __FILE__ )
#define __STR2WSTR( str ) L##str
#define _STR2WSTR(str) __STR2WSTR(str)
#define WFUNCTION _STR2WSTR( __FUNCTION__ )
#define DEBUGLOG_START( Type ) Logger::debug::log _debugLog( WFUNCTION, __LINE__, Type );
#define DEBUGLOG_SAVE { _debugLog.Save(); }
#endif //MYAPP_H
最后在 main.cpp
中我有:
#include "Test_UserPart.h"
int _tmain(int argc, _TCHAR* argv[])
{
DEBUGLOG_START( 1 )
Logger::debug::OtherNumber = 10;
_getch();
return 0;
}
当我想编译它时,出现错误 error LNK2005: "int Logger::debug::Error"(?Error@debug@Logger@@3HA) already defined in Logger.obj ...MyApp .obj
据我所知,我没有做任何循环包含。但为什么会出现此错误?
谢谢!