在.h和.cpp中单独声明和定义,但使用NON类函数



我有写函数的实践,这些函数不必在命名空间中的类中,所以我想知道是否可以在源文件和头文件中分离它们:

实用程序.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].

最新更新