与此帖子有些相似,但仍不同:我可以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] 删除。
我来说两句