zoukankan      html  css  js  c++  java
  • 头文件用于声明而不是定义

    一.背景

      昨天脑袋有点发蒙,在.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://blog.csdn.net/Stephen___Qin
  • 相关阅读:
    3164 质因数分解
    codevs3249搭积木
    codevs 2964公共素数因数
    爱改名的小融1
    单链表基础练习
    并查集(union-find sets)
    string类中字符的大小写转换
    蒜头君学英语--set()练习
    打印锯齿矩阵
    堆积木
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/12672610.html
Copyright © 2011-2022 走看看