構造体と関数ポインタ間の循環依存が原因で、次のプログラムをコンパイルできません。
// 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 をコメントし、2 番目の 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 をサポートしていません。
考えられる答えを教えてください。前もって感謝します、 サウラブ