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

时间:2014-02-20 06:03:19

标签: c++ static

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

namespace a
{
    static void fun();
}

我在源文件

中有它的定义
namespace a
{
    void fun()
    {
    }
}

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

1 个答案:

答案 0 :(得分:5)

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