2012-04-02 26 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 'int型タイプ:プロジェクト\ Visual Studioの2010 \ \ユーザー\ saurabh17g \ドキュメント\ fnptr \ fnptr \ fnptr.cpp 7

エラー1エラーC2065: 'gStruct':宣言されていない識別子c:\ users \ saurabh17g \ docum 'のpStr':宣言されていない識別子C:\ Users \ユーザーsaurabh17gドキュメントは、Visual Studio 2010 \プロジェクト\ \ \ fnptr \ fnptr \エントは、Visual Studio 2010 \プロジェクト\ fnptr \ fnptr \ fnptr.cpp 7

エラー2エラーC2065を\しますfnptr.cpp 7

エラー4エラーC2146:構文エラー: ';'がありません。前の識別子 'sFunPtr' c:\ users \ saurabh17g \ documents \ visualスタジオ2010 \ projects \ fnptr \ fnptr \ fnptr.cpp 10

エラー5エラーC4430:型指定子がない - 想定されています。注:C++は、デフォルトのint c:¥users¥saurabh17g¥documents¥visual¥studio¥visual¥studio¥fnptr¥fnptr¥fnptr.cppをサポートしていません。10

エラー6エラーC4430:型指定子がありません。私は最初のtypedefとコメント解除二のtypedef

エラーをコメントする場合は、プロジェクト\ Visual Studioの2010 \ \ユーザー\ saurabh17g \ドキュメント\ fnptr \ fnptr \ fnptr.cpp 10

:注:C++は、デフォルト-int型のCをサポートしていません。 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スタジオ2010 \ projects \ fnptr \ fnptr \ fnptr.cpp 10

エラー2エラーC4430:タイプ指定子がない - 想定されています。注:C++はdefault-int c:¥users¥saurabh17g¥documents¥visual¥studio¥visual¥studio¥fnptr¥fnptr¥fnptr.cppをサポートしていません。10

エラー3エラーC4430:タイプ指定子がない - 想定されています。注:C++はdefault-intをサポートしていません。c:¥users¥saurabh17g¥documents¥visual studio 2010¥projects¥fnptr¥fnptr¥fnptr.cpp 10

可能な回答をお知らせください。 ありがとうございます。 Saurabh

答えて

3

構造体を使用する前に宣言する必要があります。

typedefの前にstruct gStruct;を追加するだけで問題ありません。

+0

ありがとうございました。しかし、もう1つのバグがありました。関数ポインタの定義に構造体への参照が含まれていませんでした。 –

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; 
} 
関連する問題