在头文件中将函数声明为静态会导致声明但未定义的错误

Tah*_*lil 0 c++ static

假设我有一个像这样的头文件

namespace a
{
    static void fun();
}
Run Code Online (Sandbox Code Playgroud)

我在源文件中有它的定义

namespace a
{
    void fun()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

此头文件可以在这些文件的自己的项目中或在其他几个项目中使用.我得到了声明的fun()函数,但没有定义错误.我不明白为什么.但是,如果我从声明中删除静态,它就可以了!

Kev*_*nle 5

在这种情况下,static关键字意味着函数fun()的范围仅限于文件,即它具有文件范围.删除静态,它具有全局范围,但仅在命名空间内.