假设:a.cpp下有:
const int arg{64};
然后我们在main.cpp里面使用a.cpp的这个常量
声明:
#include<iostream>
extern const int arg;
int main()
{
std::cout<<arg<<std::endl;
}
然后,编译的时候发现出错了,出现了未定义的arg变量。
这是由于const变量不具有外部链接属性,所以就算是在main.cpp里面声明,编译器依然找不到这个变量。
解决方案:
修改a.cpp变量的修饰符
extern const int arg{64};
这样再编译就没有问题了,这句的意思就是告诉编译器arg具有外部链接的功能。
当然了,对于较大的源文件都是添加头文件的,通过include加载头文件是没有问题的。
那么怎么限制一个非const变量在其他cpp文件中使用呢?
我们可以使用static修饰符修饰变量,如:
a.cpp下有变量:
static int x{123};
我们在main.cpp下使用extern声明这个变量的时候就会出现未定义的符号。
static在这里的意思是,向编译器声明这个变量只具有内部链接属性。
有些小伙伴就问了,那要是extern static变量呢?
其实这种写法是编译器不允许的,所以不要抱有这种想法了吆。
同样适用于函数的声明吆!
当然了,还有另一种方法就是命名空间啦,有兴趣的小伙伴可以百度以下,www.baidu.com
感谢您的查阅,如若能帮到您,是我最大的荣幸!