在其他,h文件定义结构体类型,另一个.h文件的函数使用结构体指针,会报错结构体指针无定义
时间: 2024-09-22 13:01:11 浏览: 21
当你在.h文件中定义了一个结构体类型,而在另一个.h文件中试图通过函数接收该结构体的指针并操作它,可能会遇到"结构体指针未定义"的错误。这是因为编译器在当前作用域内找不到结构体类型的声明。解决这个问题需要遵循以下步骤:
1. **公共接口**:在包含结构体类型定义的.h文件中,应该将其作为`extern`声明,告诉其他文件这个类型的存在。例如:
```c
// struct_def.h
struct MyStruct {
// ...
};
extern struct MyStruct* myStructPointer;
```
2. **结构体定义**:然后,在至少一个.cpp文件里提供结构体的完整定义,包括它的初始化函数(如构造函数):
```c
// struct_def.cpp
#include "struct_def.h"
struct MyStruct {
// ...
};
// 初始化函数
void initializeMyStruct(struct MyStruct* ptr) {
// ...
}
```
3. **函数定义**:在使用结构体指针的.h文件中,可以这样引用和使用这个指针,但不要忘记提供初始化函数:
```c
// function_file.h
#include "struct_def.h"
// 定义函数接受结构体指针
void useStruct(struct MyStruct* ptr);
```
```c
// function_file.cpp
#include "function_file.h"
#include "struct_def.cpp"
void useStruct(struct MyStruct* ptr) {
// 现在你可以在这里访问和操作ptr指向的结构体
initializeMyStruct(ptr);
// ...
}
```