可以在h文件中声明全局自动变量吗?

奥伦·伊什·沙洛姆

此帖子有些相似,但仍不同:我可以auto在某些头文件中定义全局变量吗?我尝试使用以下文件,但无法对其进行编译。

$ cat main.cpp
auto a = 5;
#include "defs.h"
int main(int argc, char **argv){ return a; }
$ cat defs.h
#ifndef __DEFS_H__
#define __DEFS_H__
extern auto a;
#endif

在标准编译(g++ main.cpp -o main)之后,出现以下错误:

In file included from main.cpp:2:0:
defs.h:3:8: error: declaration of ‘auto a’ has no initializer
 extern auto a;
        ^~~~

有什么方法可以在源文件中定义全局自动变量并将其包含在某些头文件中?还是我必须放弃这个梦想并找到它的类型?

埃雷里卡

有什么方法可以在源文件中定义全局自动变量并将其包含在某些头文件中?

您不能在auto没有初始化的情况下声明变量。使用auto,从初始化程序推导类型。没有初始化程序,编译器将无法知道类型。编译器需要知道什么是类型。

如果您改为在标头中使用推导类型,则技术上允许以下操作(根据另一个答案中链接的SO post),尽管它在很大程度上违反了使用的目的auto

// header
extern int a;

// cpp
auto a = 5;

但不幸的是,在实践中,某些编译器不喜欢这样。

作为可行的替代方法,您可以简单地使用内联变量:

// header
inline auto a = 5;

在C ++ 17之前的版本中,您需要放弃auto外部变量的梦想

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 h 文件中声明的全局变量和对它们的访问

我可以在同一个文件中将全局变量声明为 Flow 吗?

还有其他方法可以在Extjs中声明全局变量吗?

在.h文件中的类中声明静态变量和.cpp文件中的“全局”变量之间有什么区别?

我可以在查询中声明变量吗?

我可以在C ++中全局声明类对象吗?

可以在 Excel VBA 中全局声明工作簿吗?

是否可以在Node / Express 4.0中声明全局变量

我可以在公共头文件中声明变量为const而不在私有头文件中声明为const吗?

为什么在打字稿中声明了全局`name`变量,我可以避免使用它吗?

在C ++ 11中,可以在同一行上声明全局变量和函数原型吗?

为什么即使使用#ifndef HEADER_H也不能在头文件中声明和分配全局变量

如何在.js文件中声明全局变量

在单独的文件 nodejs+typescript 中声明全局变量

android中变量的全局声明

C全局变量是自动变量吗?

可以在Zeppelin Notebook中设置全局变量吗?

您可以使用index.php-Fat Free Framework中的配置文件中的全局变量吗?

对象可以使用在其类之外声明的全局变量吗?

我可以在Java中更改变量的声明类型吗?

在Javascript中,可以在声明变量之前使用它吗?

我可以同时在VBA中声明和分配变量吗?

可以从静态函数访问main中声明的变量吗?

在 swift 中声明变量时可以使用通配符吗?

Javascript中的变量可以不及时声明吗

我可以在“if 语句”中声明一个变量吗?

在标头中声明全局变量ʻextern const int`,但在源文件中声明仅`int`

我可以在perl中自动装箱单个变量吗?

我可以在猫鼬模式中声明全局/通用方法吗?