Я не могу скомпилировать следующую программу из-за циклической зависимости между структурой и указателем на функцию.
// 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 \ visualstudio 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 ошибка 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
Пожалуйста, дайте мне знать возможный ответ.Заранее спасибо, Саурабх