我在介绍C++的oop,我有一个问题。 当我在头文件中声明一个静态函数时,为什么如果我在代码文件中也放入了静态函数,我会得到一个错误?我的意思是,为什么静态应该只在头文件?错误,因为“静态”在C代码
的menssage错误:
mod.cc:71:40:错误:不能声明成员函数 '静态INT MOD :: mida_maxima()' 为有静态链接[-fpermissive]
我在介绍C++的oop,我有一个问题。 当我在头文件中声明一个静态函数时,为什么如果我在代码文件中也放入了静态函数,我会得到一个错误?我的意思是,为什么静态应该只在头文件?错误,因为“静态”在C代码
的menssage错误:
mod.cc:71:40:错误:不能声明成员函数 '静态INT MOD :: mida_maxima()' 为有静态链接[-fpermissive]
甲static
class
里面的成员函数是一个类函数;它在没有任何接收器的情况下工作,所以this
不能在里面使用。但是,任何编制单位都可以看到它的声明。
当您定义static
函数时,它具有static
链接,因此只能从其编译单元中看到(有点像C的static
关键字)。显然,一个类函数通常应该在整个程序中可见(而不仅仅是一个编译单元)。
因此,static
成员函数的定义应该不是static
,换句话说:
// perhaps in a header file
class Foo {
static void memberfun (int); // class member function declaration
};
// definition in the compilation unit
void // static is forbidden here
Foo::memberfun(int arg) {
/// some body
}
换言之,C++重用static
关键字为两个不相关的用途:定义类别成员和声明静态链接(由C启发)。
完美!非常感谢! – KooPad
我认为这个答案并没有真正解决为什么在函数的定义中禁止static的问题。据我所知,语言可以允许在那里使用'static',因为从这个声明可以知道'memberfun'是'static',所以它没有任何区别。我怀疑背后的历史原因,但我不知道。 –
不,'static'也具有受C启发的可见性角色。另外,它用于定义类成员(不是实例成员) –
请张贴你想要做的一个例子。 –
标题:静态布尔函数(); 代码:静态布尔函数(){//代码//} 如果我在代码文件中声明该函数为静态,则会出现错误,我的问题是原因。 – KooPad
请发表[mcve]。是的,请包括MCVE的完整错误信息。 –