const常量+extern
本帖最后由 taoqilin 于 2013-03-08 16:07:38 编辑 我有两个.cpp文件和一个.h文件,.cpp文件均inclue那个.h文件,代码如下:
Main.cpp:
#include <iostream>
#include "test1.h"
using namespace std;
extern const int MIN_SIZE;
int main(){
int tmp;
char g_str[] = "123456";//定义全局变量g_str
cout << MIN_SIZE << endl;
g_fun();
cout << g_str <<endl;
A:{
int c=20;
};
}
class Foo{
};
test1.cpp:
#include <iostream>
#include "test1.h"
using namespace std;
//extern const int MAX_SIZE;
extern const int MIN_SIZE=10;
void g_fun(){
cout << "I Love YOU!" << endl;
cout << MAX_SIZE << endl;
A:{
double d=3.12;
};
}
test1.h:
#ifndef _TEST1_H_
const int MAX_SIZE=20;//声明定义全局常量MAX_SIZE
extern const int TMP_MAX_SIZE=20;//加了extern居然link报错了
#define _TEST1_H_
#endif
const int TMP_MAX_SIZE=20;//这不报错,因为const变量默认是不对外的,所以就算两个cpp文件都引用了该.h文件,也不会出现定义重复的错误?
extern const int TMP_MAX_SIZE=20;//这报错,原因同上?
在.h的注释里,就是在下不理解的地方,为什么加上extern报错,不加就不报错?望指点。 extern const c++
[解决办法]
extern的时候不要去初始化:
#ifndef _TEST1_H_
const int MAX_SIZE=20;//声明定义全局常量MAX_SIZE
extern const int MAX_SIZE;//加了extern居然link报错了
#define _TEST1_H_
#endif
const int TMP_MAX_SIZE=20;//这不报错,因为const变量默认是不对外的,所以就算两个cpp文件都引用了该.h文件,也不会出现定义重复的错误?
extern const int TMP_MAX_SIZE;//这报错,原因同上?
[解决办法]
已经说的很清楚了:
1、const int TMP=20;是定义,真正为TMP分配空间;
2、extern const int TMP;是声明,导出TMP符号而已。
[解决办法]
1.不加extern时没有报错是因为,在C++中,const T t = xxx;是链接属性默认是内部链接,所以不会出错
2.加上extern之后链接属性就是外部链接了,之后再加初始化语句会被认为是定义而不是声明,当被多个.cpp文件包含时则会导致重定义。