
头文件用于声明而不是定义
发布日期:2021-05-09 00:20:32
浏览次数:22
分类:博客文章
本文共 436 字,大约阅读时间需要 1 分钟。
一.背景
昨天脑袋有点发蒙,在.h中定义了一个全局变量CCriticalSection g_CriticalSection;然后就报了若干个LNK2005:重复定义的链接错误(单个cpp文件单独编译时不会发现问题,而链接时把把信息汇总,就会发现问题咯).原因是不应该在头文件中定义全局变量.
正确定义全局变量的方法是,在一个cpp中定义全局变量,然后在别的用到的cpp文件中使用extern来找到该变量.
参考文章:
二.延伸
后来查了下,在<C++ Primer>中有一条指导原则--头文件用于声明而不是定义.
比如 extern int i =10; //虽然声明为extern,但是它是初始化式,表明是一个定义.若写成extern int i;则是一种声明咯.
再如 double f; //不加extern,自然是声明了.
不过,存在这一原则存在3个例外,头文件可以定义类, 值在编译时就已知的const对象和inline函数.
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月28日 00时12分56秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
(转)【英雄会即时报道】五大CTO畅谈软件公司如何招聘技术人才
2023-01-23
(转)使用公用表表达式的递归查询(SQLSERVER2005)
2023-01-23
(转)在CListView列表视图中添加右键菜单的方法
2023-01-23
(转)考虑错误情况
2023-01-23
++b&&a--运算结果解析
2023-01-23
.Net(C#)实现异步编程
2023-01-23
.Net中webBrowser控件JS交互
2023-01-23
.Net中webBrowser控件指定IE版本
2023-01-23
0-1背包问题:贪心算法与动态规划的比较
2023-01-23
02-docker系列-镜像分类以及操作(导入、导出、删除)
2023-01-23
02-Docker镜像分类及操作秘籍,轻松掌握导出、导入、删除
2023-01-23
03-docker容器的基本操作
2023-01-23
03-docker系列-docker容器的基本操作
2023-01-23
04-docker-commit构建自定义镜像
2023-01-23
04-docker系列-commit构建自定义镜像
2023-01-23
05-docker系列-使用dockerfile构建镜像
2023-01-23
05-如何通过Dockerfile实现高效的应用容器化?
2023-01-23
06-docker系列-使用dockerfile构建nginx、redis镜像
2023-01-23
06-使用dockerfile构建nginx、redis镜像
2023-01-23
07-docker系列-使用dockerfile构建python、jenkins镜像
2023-01-23