![](/img/trans.png)
[英]Is there any way to declare function as extern “C” with g++ flag?
[英]Any way I can define and declare an extern object in header?
我正在编写一个完全基于模板的库,所以我没有任何 cpp 文件。 现在我想声明一个全局变量,然后我意识到我无处可去。
如果我只是在标题中声明它,我会得到一个“多重定义”错误,如果我使用extern
,我必须创建一个 cpp 文件来真正声明它。
那么有什么方法可以在标题中声明一个全局变量?
PS 因为模板类中的静态成员可以(只能)在头文件中声明,它是如何工作的?
您可以使用宏进行单个声明,
#ifndef __usermacro
#define __usermacro
//Declare global variable
#else
//Declare extern
#endif
正如@MM 所提到的,如果您使用的是C++17
或更高版本,则可以使用inline
声明。
但是,如果不是这种情况,您可以声明inline
函数,该函数返回对static
变量的引用,就像这样:
inline int& getData() {
static int data;
return data;
}
然后,在您的 .cpp 文件(以及标头中的任何函数体)中,您可以像int& data = getData()
一样简单地调用它。
附带说明一下,如果您想确保全局对象只创建一次并且不会被意外复制,那么使用signleton可能更适合您。 全局变量更像是一种 c 风格,在 c++ 中并没有真正被认为是一种好的做法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.