C++ 我可以用什么方法在标题中定义和声明外部对象?

C++ 我可以用什么方法在标题中定义和声明外部对象?,c++,C++,我正在写一个完全基于模板的库,所以我没有任何cpp文件。现在我想声明一个全局变量,然后我意识到我无处可去 如果我只是在标题中声明它,我将得到一个“多定义”错误,如果我使用extern,我必须创建一个cpp文件来真正声明它 那个么有什么方法可以在header中声明一个全局变量呢 另外,由于模板类中的静态成员(仅)可以在标头中声明,它是如何工作的 您可以使用宏来执行单个声明 #ifndef __usermacro #define __usermacro //Declare global variab

我正在写一个完全基于模板的库,所以我没有任何cpp文件。现在我想声明一个全局变量,然后我意识到我无处可去

如果我只是在标题中声明它,我将得到一个“多定义”错误,如果我使用
extern
,我必须创建一个cpp文件来真正声明它

那个么有什么方法可以在header中声明一个全局变量呢


另外,由于模板类中的静态成员(仅)可以在标头中声明,它是如何工作的

您可以使用宏来执行单个声明

#ifndef __usermacro
#define __usermacro
//Declare global variable
#else
//Declare extern 
#endif

正如@M.M所提到的,如果您使用的是
C++17
或更高版本,则可以使用
inline
声明

但是,如果不是这样,您可以声明
inline
函数,该函数返回对
static
变量的引用,如下所示:

inline int&getData(){
静态int数据;
返回数据;
}
然后,在.cpp文件中(以及在头中的任何函数体中),您可以简单地像
int&data=getData()
那样调用它


作为补充说明,如果您希望确保全局对象只创建一次,并且不会意外复制,那么最好使用。全局变量更多的是C风格,在C++中并不是真正的好实践。definition@M.M如果我使用C++ 11怎么办?有什么方法可以做到这一点吗?
#如果nedf
不在翻译单元之间共享,则这不起作用是的,没错。在单个转换单元中,可以避免全局变量的多个实例