2012-04-02 90 views
3

由於結構和函數指針之間的循環依賴關係,我無法編譯以下程序。循環依賴 - 相互引用的結構和函數指針

// 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的成員:\用戶\ saurabh17g \文檔\ Visual Studio 2010的\項目\ fnptr \ fnptr \ fnptr.cpp 31

錯誤3錯誤C2062:類型 '詮釋' 意想不到的C:\用戶\ saurabh17g \文檔\ Visual Studio 2010的\項目\ fnptr \ fnptr \ fnptr.cpp 7

錯誤1錯誤C2065:'gStruct':未聲明的標識符c:\ users \ saurabh17g \ docum ents \ 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++不支持默認int C:\用戶\ saurabh17g \文檔\ Visual Studio 2010的\項目\ 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++不支持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

請讓我知道一個可能的答案。 在此先感謝, Saurabh

回答

3

您應該先聲明一個結構體,然後才能使用它。

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

+0

謝謝asaelr ..它的工作!但是,還有一個錯誤。函數指針定義不包含對結構的引用。 – 2012-04-02 03:23:39

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; 
}