c++全局变量的正确声明
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++全局变量的正确声明相关推荐
- python声明全局变量_python怎样声明全局变量
python中定义全局变量可以使用global关键字 global介绍 在编写程序的时候,如果想为一个在函数外的变量重新赋值,并且这个变量会作用于许多函数中时,就需要告诉python这个变量的作用域是 ...
- python中list作为全局变量无需global声明的原因
发现一个问题. python中list变量作为全局变量时,在函数中可以直接修改. 而普通变量则需要先在函数中global声明,否则会报错. 例如: a = 1 def fun(): global a ...
- 骑士 java_在递归骑士之旅中正确声明变量(Java作业)
我在学年的最后一个项目(我作为CS学生的第一年)的代码中找不到错误.在执行骑士巡回赛问题时,我一直坚持递归.这是有问题的文件: https://github.com/sheagunther/tsp16 ...
- python初始化方法对应的变量是全局变量嘛_在Python中初始化全局变量的正确方法...
我有一个初始化一些全局变量的 Python模块;这样的事情: #!/usr/bin/env python import re """My awesome python l ...
- 【小程序】【Tips】跨页面全局变量的正确方法 - globalData
本页的变量对象,如何给到其他的页面和文件呢? 1 定义全局变量 全局变量的定义在项目文件,app.js里面,找到下面的定义,或者自己写一个. 在里面定义要全局访问的变量名字. 2 使用全局变量 2.1 ...
- Python学习笔记——全局变量声明
最近在编写python程序时发现,在函数中可以对函数外面的全局变量进行读取.打印等操作,但是不能赋值,否则会报错: UnboundLocalError: local variable 'a' refe ...
- C语言——全局变量的定义与声明
转自: https://www.cnblogs.com/amanlikethis/p/3319744.html C语言中全局变量的定义与声明困扰着许多C语言初学者.本文讲述了全局变量定义与声明的用法, ...
- vue 保存全局变量_Vue+Typescript起手式
TypeScript是什么? TypeScript 是一种由微软开发的自由和开源的编程语言.它是 JavaScript 的一个超集,TypeScript 在 JavaScript 的基础上添加了可选的 ...
- C++静态全局变量问题
C++中,在文件中,类外,声明一个非静态变量,这个就是全局变量,它的作用域是全局的,链接时个编译单元一起 C++中,在文件中,类外,声明一个静态变量,这个就是静态全局变量,作用域是编译单元,因此同一个 ...
最新文章
- 【PHP】字符串去空格并将每个单词首字母转换成大写de多种解法
- mysql 端口time_wait_TIME_WAIT状态全是3306解决办法
- 基于堆栈的虚拟机实现
- 通过100个单词掌握英语语法(十八)did
- java 大数据处理之内存溢出解决办法(一)
- 什么是实例对象python_python判断类型:想知道一个对象(实例或者变量)是什么类型,什么结构的...
- oauth2和jwt_使用具有OAuth2的Web应用程序和JWT的使用来调用API – WSO2 API Manager
- 矩形波如何傅立叶展开_金科文化会不会连续拉板?两位同学展开激辩
- 史上最难吃系列,肯德基就不能好好做鸡吗?
- 洛谷P3358 最长k可重区间集问题(费用流)
- 经典信息图表:2013 扁平设计 VS 拟物设计
- 是修修补补,还是买件新衣
- 原力计划第5周榜单揭晓!
- 【C语言】请将1至7中的任意一个数字转化成对应的英文星期几的前三个字母,如1转化为Mon,7转化为Sun等。 个人解答
- springbooot学习记录
- Acwing-280-陪审团(背包dp?)
- 基于FFmpeg的音视频播放器
- 安卓性能优化(响应优化)
- (重点)可导、连续、可微+(浅谈)可积 的关系以及例题深化理解
- java 拷贝图片拒绝访问_急!!!!文件夹里的图片打不开,也复制不了 现实拒绝访问,被写保护,怎么打开啊,很重大...
热门文章
- c语言程序设计教程岳莉答案,C++程序设计教程
- mongodb存list_查询 MongoDB 子文档的 List 字段
- python中json模块_Python的标准模块包json的实例用法
- 图像处理——傅里叶变换
- java自带的xml解析,使用Java自带SAX工具解析XML
- python中start用法_Start Python 学习笔记(琐碎知识,持续更新。。。)
- eclipse注释模板_Intellij IDEA设置默认文档注释
- Java中加减乘除怎样写代码,【求助】怎样实现加减乘除 代码如下
- ttc error oracle,ORA-03137: TTC protocol internal error : [12333]错误一例
- java负数转换二进制表示_Java中的负数的在计算机中的二进制表示,以及与十进制的相互转换...