2012-04-26 75 views
2

错误C2129:静态函数 'void FUNC(INT,CHAR *)' 已宣告但尚未定义编制问题 - 代码C2129

我读到:

静态函数必须的文件范围内定义。如果该函数是在另一个文件中定义的,则必须声明为extern。

文件范围意味着它必须在 C++或.h中定义,或者只是在其声明的.h文件中定义。

回答

6

C++编译器没有看到.h文件,文件的内容将被预处理器本身放置到cpp文件中。这里的文件范围应该是该函数应该在cpp文件中。

+0

好吧。干杯。我遇到的问题是在名为util.h的文件中存在一个声明为静态的函数。如果我右键单击并转到定义,它会将我带入.cpp中的定义。但是当我编译我得到上面的错误。这两个文件都在相同的位置,我在“附加包含目录”属性中添加了该文件。你有任何想法,为什么这可能会发生? – discodowney 2012-04-26 12:47:10

+0

当出现错误时,您应该注意文件实际编译的内容。当你编译Util.cpp并且函数在Util.cpp中定义时,你不会得到那个错误。 – harper 2012-04-26 12:51:22

+0

您需要从util.h中移除静态函数 - 静态函数应该只在.cpp文件中,并且只能用于.cpp文件 - 如果您需要它在两个.cpp文件中,那么它需要extern – Mark 2012-04-26 12:51:36

2

如果函数是在另一个文件中定义的,则必须声明为 extern。

在此声明中,“另一个文件”转换为“另一个目标文件”,它在编译后最终会链接在一起。就像Naveen回答的那样,编译器并不在乎函数在哪个源文件中声明。