在c++中,如何实现不加函数声明但新增函数指针来调用函数,请分多个.cpp文件和.h文件具例
时间: 2024-09-19 19:17:01 浏览: 50
在 C++ 中,如果你想在头文件 `.h` 中声明函数指针而不直接提供函数的完整实现,而在另一个 `.cpp` 文件中提供函数的实现并通过该函数指针调用它,你可以使用以下步骤:
1. **头文件 (example.h)**:
```cpp
// example.h
#ifndef EXAMPLE_H
#define EXAMPLE_H
// 函数指针类型声明
typedef void (*FunctionPointerType)(int);
// 函数声明但不提供实现
extern FunctionPointerType printNumber;
#endif // EXAMPLE_H
```
在这个头文件中,我们定义了一个名为 `FunctionPointerType` 的函数指针类型,并对外宣告了一个指向这个类型的指针 `printNumber`。
2. **包含头文件的源文件 (main.cpp)**:
```cpp
#include "example.h"
// 定义函数的实现
void printNumber(int num) {
std::cout << "The number is: " << num << std::endl;
}
// 在这里将函数地址赋值给函数指针
int main() {
// 将函数的地址传给printNumber
printNumber = &printNumber; // 注意这里无需提供完整函数名,仅传递函数地址即可
printNumber(5); // 调用函数
return 0;
}
```
在 `main.cpp` 文件中,我们首先包含了头文件,然后定义了函数 `printNumber` 并在 `main()` 函数中初始化了函数指针 `printNumber` 为自身的地址。
3. **链接阶段**:
当你编译上述两个文件时,`main.cpp` 首先编译生成 `.obj` 文件,然后将 `example.obj` 和 `main.obj` 进行链接。因为函数的实现是在 `main.cpp` 中提供的,所以链接阶段会找到并链接到对应的函数。
阅读全文