
c++ 命名空间,自己定义了一个命名空间,总是提示有错误
在logTool.h里面定义命名空间#ifndefLOGTOOL_H#defineLOGTOOL_Hnamespacelogspace{LoggerlogObj=Logg...
在logTool.h里面定义命名空间
#ifndef LOGTOOL_H
#define LOGTOOL_H
namespace logspace
{
Logger logObj=Logger.getRoot();
}
#endif
在distance.h里面
#ifndef DISTANCE_H
#define DISTANCE_H
#include"logTool.h"
using namespace logspace;
class ...
#endif
在query.h里面
#ifndef QUERY_H
#define QUERY_H
#include"logTool.h"
using namespace logspace;
class...
#endif
在search.cpp
#include"query.h"
#include"distance.h"
int main
{
......
}
提示在search.obj里面已经定义logObj对象的链接错误,郁闷,为什么啊? 展开
#ifndef LOGTOOL_H
#define LOGTOOL_H
namespace logspace
{
Logger logObj=Logger.getRoot();
}
#endif
在distance.h里面
#ifndef DISTANCE_H
#define DISTANCE_H
#include"logTool.h"
using namespace logspace;
class ...
#endif
在query.h里面
#ifndef QUERY_H
#define QUERY_H
#include"logTool.h"
using namespace logspace;
class...
#endif
在search.cpp
#include"query.h"
#include"distance.h"
int main
{
......
}
提示在search.obj里面已经定义logObj对象的链接错误,郁闷,为什么啊? 展开
2个回答
展开全部
编译器对于每一个.cpp文件都会分别生成一个.obj文件(并且每一个生成过程都是分别进行的,因此不会受 #ifndef LOGTOOL_H #define LOGTOOL_H这样的防护影响),因此由于多个.cpp文件都包含了logTool.h,不止一个.obj文件包含了logObj对象的定义,在把多个.obj文件连接成.exe文件的时候就会发现重复定义的错误……
这也就是不要在头文件中定义对象的原因,因为头文件可能会被多个.cpp文件包含,这样就会有重复定义的错误……
这也就是不要在头文件中定义对象的原因,因为头文件可能会被多个.cpp文件包含,这样就会有重复定义的错误……
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |