一.背景
昨天脑袋有点发蒙,在.h中定义了一个全局变量CCriticalSection g_CriticalSection;然后就报了若干个LNK2005:重复定义的链接错误(单个cpp文件单独编译时不会发现问题,而链接时把把信息汇总,就会发现问题咯).原因是不应该在头文件中定义全局变量.
正确定义全局变量的方法是,在一个cpp中定义全局变量,然后在别的用到的cpp文件中使用extern来找到该变量.
参考文章:error:LNK2005 已经在*.obj中定义
二.延伸
后来查了下,在<C++ Primer>中有一条指导原则--头文件用于声明而不是定义.
比如 extern int i =10; //虽然声明为extern,但是它是初始化式,表明是一个定义.若写成extern int i;则是一种声明咯.
再如 double f; //不加extern,自然是声明了.
不过,存在这一原则存在3个例外,头文件可以定义类, 值在编译时就已知的const对象和inline函数.
原文链接: https://www.cnblogs.com/Stephen-Qin/p/12672610.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/341260
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!