码迷,mamicode.com
首页 > 编程语言 > 详细

C++基础之全局变量

时间:2017-06-17 11:10:02      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:tracking   prim   err   title   头文件   art   语言   保护   定义   

C++的水比較深,之前我一直以为C++的全局变量会像其它语言一样,很easy仅仅要在头文件里,定义一个变量就可以,比方以下的test.h:

#ifndef _TEST_H
#define _TEST_H

int a = 10;

#endif


我都加上头文件保护符,总应该没有多重包括的问题了吧?没想到多个cpp文件引用同个头文件还是狂报错:error LNK2005 a 已经在 xx.obj中定义。

又拿起《C++ Primer》看了下。发现正确的应该这么写:

test.h

#ifndef _TEST_H
#define _TEST_H

extern int a;

#endif

test.cpp

#include "test.h"

int a = 10;

原来:头文件用于声明而不是用于定义!定义仅仅能够出现一次。而声明则能够出现多次。

extern int a = 10;//初始化了值,是定义
double b;            //没有extern关键词,是定义

对于头文件不应该包括定义这一规则。有3个例外。

头文件能够定义类,值在编译时就已知道的const对象和inline函数。

C++基础之全局变量


C++基础之全局变量

标签:tracking   prim   err   title   头文件   art   语言   保护   定义   

原文地址:http://www.cnblogs.com/wzjhoutai/p/7039521.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!