首页 > 技术文章 > cpp文件之间的const数据类型的传递和static限制数据类型的传递

Super-biscuits 2020-10-21 12:09 原文

 

 

假设: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

感谢您的查阅,如若能帮到您,是我最大的荣幸!

 

推荐阅读