C++基础之全局变量

C++的水比较深,之前我一直以为C++的全局变量会像其他语言一样,非常简单只要在头文件中,定义一个变量即可,比如下面的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++基础之全局变量,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。