头文件用于声明而不是定义
发布日期: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函数.

上一篇:关于VS中未经处理的异常的梳理
下一篇:SQL单表查询练习部分总结

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年04月28日 00时12分56秒