我有一个程序,其中类T具有静态函数.
static void T::func()
{
m_i=10;
cout<<m_i<<endl;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在函数定义中添加静态时,编译器抛出错误错误:无法声明成员函数'static void T :: func()'具有静态链接.为什么在定义中不接受静态关键字?
问题是关键字static
根据上下文意味着不同的东西.
当您将成员函数声明为静态时,例如
class T
{
...
static void func();
...
};
Run Code Online (Sandbox Code Playgroud)
那么static
关键字意味着它func
是一个类函数,它没有绑定到特定的对象.
在源文件中定义函数时,例如
static void T::func() { ... }
Run Code Online (Sandbox Code Playgroud)
然后设置功能链接,这与static
在类中的声明中使用不同.什么static
定义函数是说,该功能只在当前可用的时候做翻译单元,并且违背了声明,该功能可用于所有谁知道类.
根本不可能使成员函数(声明static
与否)具有静态链接.
如果你想从其他人"隐藏"成员函数,那么就无法调用它,为什么不简单地将它作为private
成员函数?您也可以使用像 pimpl习语这样的东西,或者只是将它作为成员函数开始使用,在这种情况下,您可以声明它具有static
链接.