我刚开始学习 C++,所以你必须忍受我的无知。有没有办法声明函数,以便可以在使用它们的函数之前引用它们而无需编写它们。我正在使用一个 cpp 文件(不是我的决定)并且我的函数会调用它们自己,因此实际上并没有正确的顺序来放置它们。在使用它们之前有什么方法可以#define 函数或类似的东西?或者也许是一种使用范围运算符标记它们的方法,而不需要它们实际上是一个类的一部分?
提前致谢
您可以在实现它们之前编写函数原型。函数原型命名一个函数、它的返回类型和它的参数类型。唯一需要在函数调用之上的是原型。这是一个例子:
// prototype
int your_function(int an_argument);
// ...
// here you can write functions that call your_function()
// ...
// implementation of your_function()
int your_function(int an_argument) {
return an_argument + 1;
}
我认为您指的是函数原型。
这是您在头文件中定义函数原型的地方,但在源 (.cpp) 文件中定义实现。
需要引用函数的源代码只包含头文件,它为编译器提供了足够的信息,以将函数调用与您正在调用的函数的参数和返回值相关联。
只有在链接阶段,函数“符号”才会针对源文件解析——如果此时函数实现不存在,您将得到一个未解析的符号。
这是一个例子:
库头文件 - library.h
// This defines a prototype (or signature) of the function
void libFunction(int a);
库源 (.cpp) 文件 - library.cpp
// This defines the implementation (or internals) of the function
void libFunction(int a)
{
// Function does something here...
}
客户端代码
#include "library.h"
void applicationFunction()
{
// This function call gets resolved against the symbol at the linking stage
libFunction();
}
你需要的是一个函数声明(又名原型)。声明是没有主体的函数的返回类型、名称和参数列表。这些通常在头文件中,但并非必须如此。这是一个例子:
#include< stdio >
using namespace std;
void bar( int x ); // declaration
void foo( int x ); // declaration
int main() {
foo( 42 ); // use after declaration and before definition
return 0;
}
void foo( int x ) { // definition
bar( x ); // use after declaration and before definition
}
void bar( int x ) { // definition
cout << x;
}
是的。将函数的签名放在文件顶部或头文件 (.h) 中。
所以:
void OtherFunc(int a);
void SomeFunc()
{
OtherFunc(123);
}
void OtherFunc(int a)
{
...
}
类成员函数在定义类接口的头文件中声明。此头文件应包含在包含实现的 CPP 文件的顶部或附近。因此,在 CPP 文件中定义成员函数的顺序无关紧要,因为所有声明都已包含在内。
根据您的问题,我想您正在考虑编写免费函数。您可以使用相同的技术来声明自由函数;但是,我警告不要使用太多的免费功能。