C++中全局变量声明错误情况
造成LNK2005错误主要有以下几种情况:   
  1.重复定义全局变量。可能存在两种情况:   
  A、对于一些初学编程的程序员,有时候会以为需要使用全局变量的地方就可以使用定义申明一下。其实这是错误的,全局变量是针对整个工程的。正确的应该是在一个CPP文件中定义如下:int   g_Test;那么在使用的CPP文件中就应该使用:extern   int  g_Test即可,如果还是使用int   g_Test,那么就会产生LNK2005错误,一般错误错误信息类似:AAA.obj   error   LNK2005   int  book   c?book@@3HA   already   defined   in   BBB.obj。切记的就是不能给变量赋值否则还是会有LNK2005错误。   
                这里需要的是“声明”,不是“定义”!根据C++标准的规定,一个变量是声明,必须同时满足两个条件,否则就是定义:  
  (1)声明必须使用extern关键字;(2)不能给变量赋初值   
  所以,下面的是声明:   
  extern   int   a;   
  下面的是定义   
  int   a;   int   a   =   0;   extern   int   a   =0;   
  B、对于那么编程不是那么严谨的程序员,总是在需要使用变量的文件中随意定义一个全局变量,并且对于变量名也不予考虑,这也往往容易造成变量名重复,而造成LNK2005错误。   
    
  2.头文件的包含重复。往往需要包含的头文件中含有变量、函数、类的定义,在其它使用的地方又不得不多次包含之,如果头文件中没有相关的宏等防止重复链接的措施,那么就会产生LNK2005错误。解决办法是在需要包含的头文件中做类似的处理:#ifndef   MY_H_FILE       //如果没有定义这个宏   
  #define   MY_H_FILE       //定义这个宏   
  …….       //头文件主体内容   
  …….   
  #endif   
  上面是使用宏来做的,也可以使用预编译来做,在头文件中加入:   
  #pragma   once   
  //头文件主体   
  3.使用第三方的库造成的。这种情况主要是C运行期函数库和MFC的库冲突造成的。具体的办法就是将那个提示出错的库放到另外一个库的前面。另外选择不同的C函数库,可能会引起这个错误。微软和C有两种C运行期函数库,一种是普通的函数库:LIBC.LIB,不支持多线程。另外一种是支持多线程的:msvcrt.lib。如果一个工程里,这两种函数库混合使用,可能会引起这个错误,一般情况下它需要MFC的库先于C运行期函数库被链接,因此建议使用支持多线程的msvcrt.lib。所以在使用第三方的库之前首先要知道它链接的是什么库,否则就可能造成LNK2005错误。如果不得不使用第三方的库,可以尝试按下面所说的方法修改,但不能保证一定能解决问题,前两种方法是微软提供的:   
  A、选择VC菜单Project->Settings->Link->Catagory选择Input,再在Ignore   libraries   的Edit栏中填入你需要忽略的库,如:Nafxcwd.lib;Libcmtd.lib。然后在Object/library   Modules的Edit栏中填入正确的库的顺序,这里需要你能确定什么是正确的顺序,呵呵,God   bless   you!   
  B、选择VC菜单Project->Settings->Link页,然后在Project   Options的Edit栏中输入/verbose:lib,这样就可以在编译链接程序过程中在输出窗口看到链接的顺序了。   
  C、选择VC菜单Project->Settings->C/C++页,Catagory选择Code   Generation后再在User   Runtime   libraray中选择MultiThread   DLL等其他库,逐一尝试。   
  关于编译器的相关处理过程,参考:   
  http://www.donews.net/xzwenlan/archive/2004/12/23/211668.aspx

c++全局变量的正确声明相关推荐

  1. python声明全局变量_python怎样声明全局变量

    python中定义全局变量可以使用global关键字 global介绍 在编写程序的时候,如果想为一个在函数外的变量重新赋值,并且这个变量会作用于许多函数中时,就需要告诉python这个变量的作用域是 ...

  2. python中list作为全局变量无需global声明的原因

    发现一个问题. python中list变量作为全局变量时,在函数中可以直接修改. 而普通变量则需要先在函数中global声明,否则会报错. 例如: a = 1 def fun(): global a ...

  3. 骑士 java_在递归骑士之旅中正确声明变量(Java作业)

    我在学年的最后一个项目(我作为CS学生的第一年)的代码中找不到错误.在执行骑士巡回赛问题时,我一直坚持递归.这是有问题的文件: https://github.com/sheagunther/tsp16 ...

  4. python初始化方法对应的变量是全局变量嘛_在Python中初始化全局变量的正确方法...

    我有一个初始化一些全局变量的 Python模块;这样的事情: #!/usr/bin/env python import re """My awesome python l ...

  5. 【小程序】【Tips】跨页面全局变量的正确方法 - globalData

    本页的变量对象,如何给到其他的页面和文件呢? 1 定义全局变量 全局变量的定义在项目文件,app.js里面,找到下面的定义,或者自己写一个. 在里面定义要全局访问的变量名字. 2 使用全局变量 2.1 ...

  6. Python学习笔记——全局变量声明

    最近在编写python程序时发现,在函数中可以对函数外面的全局变量进行读取.打印等操作,但是不能赋值,否则会报错: UnboundLocalError: local variable 'a' refe ...

  7. C语言——全局变量的定义与声明

    转自: https://www.cnblogs.com/amanlikethis/p/3319744.html C语言中全局变量的定义与声明困扰着许多C语言初学者.本文讲述了全局变量定义与声明的用法, ...

  8. vue 保存全局变量_Vue+Typescript起手式

    TypeScript是什么? TypeScript 是一种由微软开发的自由和开源的编程语言.它是 JavaScript 的一个超集,TypeScript 在 JavaScript 的基础上添加了可选的 ...

  9. C++静态全局变量问题

    C++中,在文件中,类外,声明一个非静态变量,这个就是全局变量,它的作用域是全局的,链接时个编译单元一起 C++中,在文件中,类外,声明一个静态变量,这个就是静态全局变量,作用域是编译单元,因此同一个 ...

最新文章

  1. 【PHP】字符串去空格并将每个单词首字母转换成大写de多种解法
  2. mysql 端口time_wait_TIME_WAIT状态全是3306解决办法
  3. 基于堆栈的虚拟机实现
  4. 通过100个单词掌握英语语法(十八)did
  5. java 大数据处理之内存溢出解决办法(一)
  6. 什么是实例对象python_python判断类型:想知道一个对象(实例或者变量)是什么类型,什么结构的...
  7. oauth2和jwt_使用具有OAuth2的Web应用程序和JWT的使用来调用API – WSO2 API Manager
  8. 矩形波如何傅立叶展开_金科文化会不会连续拉板?两位同学展开激辩
  9. 史上最难吃系列,肯德基就不能好好做鸡吗?
  10. 洛谷P3358 最长k可重区间集问题(费用流)
  11. 经典信息图表:2013 扁平设计 VS 拟物设计
  12. 是修修补补,还是买件新衣
  13. 原力计划第5周榜单揭晓!
  14. 【C语言】请将1至7中的任意一个数字转化成对应的英文星期几的前三个字母,如1转化为Mon,7转化为Sun等。 个人解答
  15. springbooot学习记录
  16. Acwing-280-陪审团(背包dp?)
  17. 基于FFmpeg的音视频播放器
  18. 安卓性能优化(响应优化)
  19. (重点)可导、连续、可微+(浅谈)可积 的关系以及例题深化理解
  20. java 拷贝图片拒绝访问_急!!!!文件夹里的图片打不开,也复制不了 现实拒绝访问,被写保护,怎么打开啊,很重大...

热门文章

  1. c语言程序设计教程岳莉答案,C++程序设计教程
  2. mongodb存list_查询 MongoDB 子文档的 List 字段
  3. python中json模块_Python的标准模块包json的实例用法
  4. 图像处理——傅里叶变换
  5. java自带的xml解析,使用Java自带SAX工具解析XML
  6. python中start用法_Start Python 学习笔记(琐碎知识,持续更新。。。)
  7. eclipse注释模板_Intellij IDEA设置默认文档注释
  8. Java中加减乘除怎样写代码,【求助】怎样实现加减乘除 代码如下
  9. ttc error oracle,ORA-03137: TTC protocol internal error : [12333]错误一例
  10. java负数转换二进制表示_Java中的负数的在计算机中的二进制表示,以及与十进制的相互转换...