4

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

// 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 error C2062: type 'int' unexpected 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++ 不支持默认整数 c:\users\saurabh17g\documents\visual studio 2010\projects\fnptr\fnptr\fnptr.cpp 10

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

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

错误 4 错误 C2039:“sFunPtr”:不是“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++ 不支持默认整数 c:\users\saurabh17g\documents\visual studio 2010\projects\fnptr\fnptr\fnptr.cpp 10

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

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

4

2 回答 2

3

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

只需在struct gStruct;之前添加typedef,就可以了。

于 2012-04-02T02:47:54.427 回答
0
// fnPtr.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdlib.h"
//typedef gNewType;
struct gStruct;
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(gStruct *pStr1, int pNum){

return ;
}
int _tmain(int argc, _TCHAR* argv[])
{
void (*fnPtr)(gStruct *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;
}
于 2012-04-03T22:43:13.000 回答