循环依赖 - 结构和函数指针相互引用

标签 c structure function-pointers cyclic-reference

由于结构和函数指针之间的循环依赖,我无法编译以下程序。

//fnPtr.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "stdlib.h"
//typedef gNewType;
typedef void (*ptr)(gStruct *pStr, int pNm);
struct gInStruct{
char *sAlpBet;
ptr sFunPtr;    
};

struct gStruct{
//gNewType sNtype;
gInStruct sInStruct;
int sNum;
};
//typedef void (*ptr)(gStruct *pStr, int pNm);
void myFun(char *pStr1, int pNum){

return ;
}
int _tmain(int argc, _TCHAR* argv[])
{
void (*fnPtr)(char *pStr, int pNm);
char lAlphabet = 'a';
fnPtr = myFun;
gStruct *lStructPtr = (gStruct*)malloc(sizeof(gStruct));
lStructPtr->sNum = 10;
lStructPtr->sInStruct.sAlpBet = &lAlphabet;
lStructPtr->sInStruct.sFunPtr = fnPtr;
return 0;
}

我收到以下错误:

错误 7 错误 C2039: 'sFunPtr' : 不是 'gInStruct' c:\users\saurabh17g\documents\visual studio 2010\projects\fnptr\fnptr\fnptr.cpp 31 的成员

错误 3 错误 C2062:键入 'int' 意外 c:\users\saurabh17g\documents\visual studio 2010\projects\fnptr\fnptr\fnptr.cpp 7

错误 1 ​​错误 C2065:'gStruct':未声明的标识符 c:\users\saurabh17g\documents\visual studio 2010\projects\fnptr\fnptr\fnptr.cpp 7

错误 2 错误 C2065:'pStr':未声明的标识符 c:\users\saurabh17g\documents\visual studio 2010\projects\fnptr\fnptr\fnptr.cpp 7

错误 4 错误 C2146:语法错误:缺少“;”在标识符 'sFunPtr' 之前 c:\users\saurabh17g\documents\visual studio 2010\projects\fnptr\fnptr\fnptr.cpp 10

错误 5 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int c:\users\saurabh17g\documents\visual studio 2010\projects\fnptr\fnptr\fnptr.cpp 10

错误 6 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int c:\users\saurabh17g\documents\visual studio 2010\projects\fnptr\fnptr\fnptr.cpp 10

如果我注释第一个 typedef 并取消注释第二个 typedef

错误 4 error C2039: 'sFunPtr' : is not a member of 'gInStruct' c:\users\saurabh17g\documents\visual studio 2010\projects\fnptr\fnptr\fnptr.cpp 31

错误 1 ​​错误 C2146:语法错误:缺少“;”在标识符 'sFunPtr' 之前 c:\users\saurabh17g\documents\visual studio 2010\projects\fnptr\fnptr\fnptr.cpp 10

错误 2 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int c:\users\saurabh17g\documents\visual studio 2010\projects\fnptr\fnptr\fnptr.cpp 10

错误 3 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int c:\users\saurabh17g\documents\visual studio 2010\projects\fnptr\fnptr\fnptr.cpp 10

请让我知道一个可能的答案。
提前致谢,
索拉布

最佳答案

您应该先声明一个结构体,然后才能使用它。

只需添加 struct gStruct;之前typedef ,它会没事的。

关于循环依赖 - 结构和函数指针相互引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9970252/

相关文章:

c++ - C++11 中的函数返回函数指针

c - 确定 Linux 内核 (x86_64) 中进程的地址大小

java - JNA:如何定义具有自定义位大小字段的结构?

c++ - 如何使用 C++ lambda 将成员函数指针转换为普通函数指针以用作回调

c++ - 具有插件、dll 和第 3 方工具的大型 C++ 项目的结构

mysql 结构化类别

c - C 中的 "this"指针(不是 C++)

java - 在 Java 中创建类似结构的数据结构

c - 寻求调试帮助,为什么这个分词器没有正确复制数组?

c - 非接口(interface)函数原型(prototype)应该放在哪里?