C++ 怎么定义一个全局函数,能够在一个工程的所有文件中使用! 5

问题描述:在头文件log.h中定义了一个LOG函数(就一个普通函数,不是类成员函数),用于向文件中写日志,然后在其他类中把log.h头文件包含进来。编译链接是时会出现:“... 问题描述:在头文件log.h中定义了一个LOG函数(就一个普通函数,不是类成员函数),用于向文件中写日志,然后在其他类中把log.h头文件包含进来。编译链接是时会出现 :“ error LNK2005: "void __cdecl log(char *)" (?log@@YAXPAD@Z) 已经在 Adapter.obj 中定义”这样的错误提示 展开
 我来答
房子a房子a
2018-03-01 · TA获得超过2047个赞
知道小有建树答主
回答量:783
采纳率:85%
帮助的人:553万
展开全部
这应该是你的log.h文件写的有问题。由于log.h应该是一个各个模块都要使用的模块,所以其他cpp文件或者h文件均会include这个log.h文件,这就会导致编译器多次解析log.h文件中的函数,所以会出现重定义。
解决方法是,在log.h头文件的最开始加上:
#ifndef __LOG_H__
#define __LOG_H__
//log.h头文件的全部代码
#endif // __LOG_H__
这样log.h头文件无论被引用多少次都只会被解析一次.
另外要说的这不是纯c++编程,这种用法属于c与c++的混合编程。还有一个需要注意的点,在编译器编译函数的时候为了实现函数的重载和同名函数,编译器会将函数的名字进行修改。这又涉及到调用约定的问题,不同的调用约定的模块之间没法调用函数。向你上面的报错信息中的__cdecl就是vs的默认调用约定。关于调用约定与语言的多种组合的问题,你可以上网去搜索一下,在vs上编程时一定要注意。
疯疯由01
推荐于2016-03-23 · TA获得超过7.9万个赞
知道大有可为答主
回答量:1.2万
采纳率:0%
帮助的人:3045万
展开全部
在log.h中只写函数的声明,另外建立一个log.cpp的文件,把函数的实现都移到这个cpp文件中去就可以了。
其他方法如下:
1:在头文件是声明变量,然后在使用的文件中用exten标识。
".h":
int ntemp;
".cpp":
exten int ntemp;
2:定义一个全局变量类,使用时包含头文件即可:
"GlobalVar.h"
Class CGlobalVar
{
CGlobalVr();
~CGlobal();
static int ntemp; //用static
};
"GlobalVar.cpp"
int CGlobalVar::ntemp = 0;//定义并初始化
CGlobalVar::CGlobalVar()
{
}
CGlobalVar::~CGlobalVar()
{
}

3:全局函数可以用上面2的做法外还可以:
在".h"里声明
int GetDataTime(CString strDataTime, CString strSep);
在".cpp"里实现
int GetDataTime(CString strDataTime, CString strSep)
{
....
}
使用时只是将".h"文件包含进去即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
热雪丨骚年
推荐于2018-03-01 · TA获得超过1.3万个赞
知道大有可为答主
回答量:2134
采纳率:90%
帮助的人:224万
展开全部
在log.h中只写函数的声明
另外建立一个log.cpp的文件,把函数的实现都移到这个cpp文件中去就可以了。
全局函数就是可以被其他文件中函数调用,比如一个大型程序,由很多人来共同编写,每个人写的程序为一个文件,全局函数就可以被另一个文件中的程序调用,声明函数时不管写没写extern都默认为全局函数,如果不想被其他人调用,可以用static来定义,就只能被本文件程序调用
全局函数是定义在类外的函数,成员函数就是定义在类中的函数。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
静夜思月下独酌
2012-03-28 · 欢迎来到唐李白的意念派主题party!
静夜思月下独酌
采纳数:31 获赞数:76

向TA提问 私信TA
展开全部
在log.h中只写函数的声明
另外建立一个log.cpp的文件,把函数的实现都移到这个cpp文件中去就可以了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
惟爱你290
2020-05-16
知道答主
回答量:4
采纳率:100%
帮助的人:2097
展开全部
典型的重复定义问题
解决方法1:新建一个log.cpp,把log.h中LOG函数的定义挪过去,其他文件只需包含log.h头文件就行。
解决方法2:不用修改,去掉其他文件中的log.h头文件,把函数LOG声明一下;(推荐)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式