1

我刚开始学习 C++,所以你必须忍受我的无知。有没有办法声明函数,以便可以在使用它们的函数之前引用它们而无需编写它们。我正在使用一个 cpp 文件(不是我的决定)并且我的函数会调用它们自己,因此实际上并没有正确的顺序来放置它们。在使用它们之前有什么方法可以#define 函数或类似的东西?或者也许是一种使用范围运算符标记它们的方法,而不需要它们实际上是一个类的一部分?

提前致谢

4

5 回答 5

9

您可以在实现它们之前编写函数原型。函数原型命名一个函数、它的返回类型和它的参数类型。唯一需要在函数调用之上的是原型。这是一个例子:

// 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;
}
于 2009-01-28T04:22:56.097 回答
4

我认为您指的是函数原型

这是您在头文件中定义函数原型的地方,但在源 (.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();
}
于 2009-01-28T04:23:40.650 回答
4

你需要的是一个函数声明(又名原型)。声明是没有主体的函数的返回类型、名称和参数列表。这些通常在头文件中,但并非必须如此。这是一个例子:

#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;
}
于 2009-01-28T04:34:04.170 回答
2

是的。将函数的签名放在文件顶部或头文件 (.h) 中。

所以:

void OtherFunc(int a);

void SomeFunc()
{
    OtherFunc(123);
}

void OtherFunc(int a)
{
    ...
}
于 2009-01-28T04:23:09.060 回答
2

类成员函数在定义类接口的头文件中声明。此头文件应包含在包含实现的 CPP 文件的顶部或附近。因此,在 CPP 文件中定义成员函数的顺序无关紧要,因为所有声明都已包含在内。

根据您的问题,我想您正在考虑编写免费函数。您可以使用相同的技术来声明自由函数;但是,我警告不要使用太多的免费功能。

于 2009-01-28T04:23:52.257 回答