Sai*_*ait 62 c++ static-methods
我使用C++从以下代码中收到错误.
Main.cpp的
#include "file.h"
int main()
{
int k = GetInteger();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
File.h
static int GetInteger();
Run Code Online (Sandbox Code Playgroud)
File.cpp
#include "file.h"
static int GetInteger()
{
return 1;
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
Error C2129: static function 'int GetInteger(void)' declared but not defined.
Run Code Online (Sandbox Code Playgroud)
我读过着名的文章"用C和C++组织代码文件",但不明白这段代码有什么问题.
HC4*_*ica 119
在C++中,static在全局/命名空间范围内意味着函数/变量仅用于定义它的转换单元,而不是在其他转换单元中.
在这里,您尝试使用来自不同的转换单元(Main.cpp)的静态函数(而不是定义它的那个)(File.cpp).
删除它static,它应该工作正常.
Luc*_*ore 21
更改
static int GetInteger();
Run Code Online (Sandbox Code Playgroud)
至
int GetInteger();
Run Code Online (Sandbox Code Playgroud)
static在这种情况下,为方法提供内部链接,这意味着您只能在定义它的翻译单元中使用它.
你定义它File.cpp并尝试使用它main.cpp,但main没有它的定义,因为你声明它static.
因为在这种情况下,static意味着函数的名称具有内部链接; 即GetInteger在一个翻译单元是无关的GetInteger任何其它翻译单元.关键字static已重载:在某些情况下,它会影响生命周期,而在其他情况下会影响绑定.这里特别令人困惑,因为"静态"也是一生的名字.函数和在命名空间范围内声明的数据始终具有静态生存期; 当static它们出现在声明中时,会导致内部绑定,而不是外部绑定.