我有写函数的实践,这些函数不必在命名空间中的类中,所以我想知道是否可以在源文件和头文件中分离它们:
实用程序.hpp:
namespace nms {
static void process();
};
实用程序.cpp
void nms::process(){/*...*/}
但像这样,我只得到一个错误:main.cpp:(.text+0x5): undefined reference to 'nms::process()'
。所以我想知道这是否可能。
在头文件utilities.hpp
:中
namespace nms {
static void process();
};
static
意味着函数具有内部链接,意味着它为包含标头的每个翻译单元声明一个唯一的函数。
然而,对应的唯一(内部链接(process()
函数具有定义的唯一翻译单元(TU(在与utilities.cpp
相关联的TU中,而对于包括utilities.hpp
的任何其他源文件,不存在TU本地process()
函数的定义。
这就解释了为什么在utilities.cpp
以外的位置出现未定义的引用错误,只要该使用站点需要TU本地函数的定义。删除static后,公开使用的process()
函数将不会有内部链接。
。。。但是NON类函数?
不幸的是,static
关键字在C++中的含义非常重载,类成员函数的static
与上面的process()
对于命名空间作用域函数的含义不同。对于类成员函数,使用static
关键字使静态成员([class.static].