2012-04-02 14 views
3

Ich kann das folgende Programm wegen der zyklischen Abhängigkeit zwischen einer Struktur und einem Funktionszeiger nicht kompilieren.zyklische Abhängigkeit - Strukturen und Funktionszeiger, die sich gegenseitig referenzieren

// fnPtr.cpp: Definiert den Einstiegspunkt für die Konsolenanwendung. //

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

ich folgende Fehler bin immer:

Fehler 7 Fehler C2039: 'sFunPtr': ist kein Mitglied von 'gInStruct' c: \ users \ saurabh17g \ Dokumente Visual Studio 2010 \ \ Projekte \ fnptr \ fnptr \ fnptr.cpp 31

Fehler 3 Fehler C2062: Typ 'int' unerwartet c: \ users \ saurabh17g \ Dokumente \ Visual Studio 2010 \ projects \ fnptr \ fnptr \ fnptr.cpp 7

Fehler 1 Fehler C2065: 'gStruct': nicht deklarierter Bezeichner c: \ users \ suarabh17g \ docum ents \ visual studio 2010 \ projekte \ fnptr \ fnptr \ fnptr.cpp 7

Fehler 2 Fehler C2065: 'pStr': nicht deklarierter Bezeichner c: \ users \ suarabh17g \ Dokumente \ Visual Studio 2010 \ projects \ fnptr \ fnptr \ fnptr.cpp 7

Fehler 4 Fehler C2146: Syntaxfehler: fehlt ';' Bezeichner 'sFunPtr' c: \ Benutzer \ suarabh17g \ Dokumente \ Visual Studio 2010 \ Projekte \ fnptr \ fnptr \ fnptr.cpp 10

Fehler 5 Fehler C4430: Typspezifizierer fehlt - int wird angenommen. Hinweis: C++ unterstützt nicht den Standardwert -int c: \ Benutzer \ suarabh17g \ Dokumente \ Visual Studio 2010 \ Projekte \ fnptr \ fnptr \ fnptr.cpp 10

Fehler 6 Fehler C4430: fehlende Typangabe - int angenommen. Hinweis: C++ nicht default-int c unterstützen: \ users \ saurabh17g \ Dokumente \ Visual Studio 2010 \ projects \ fnptr \ fnptr \ fnptr.cpp 10

Wenn ich zum ersten Mal typedef und uncomment zweite typedef Kommentar

Fehler 4 Fehler C2039: 'sFunPtr': ist kein Mitglied von 'gInStruct' c: \ Benutzer \ suarabh17g \ Dokumente \ Visual Studio 2010 \ Projekte \ fnptr \ fnptr \ fnptr.cpp 31

Fehler 1 Fehler C2146: Syntaxfehler : fehlt ';' Bezeichner 'sFunPtr' c: \ Benutzer \ suarabh17g \ Dokumente \ Visual Studio 2010 \ Projekte \ fnptr \ fnptr \ fnptr.cpp 10

Fehler 2 Fehler C4430: Typspezifizierer fehlt - int wird angenommen. Hinweis: C++ unterstützt nicht den Standardwert -int c: \ Benutzer \ suarabh17g \ Dokumente \ Visual Studio 2010 \ Projekte \ fnptr \ fnptr \ fnptr.cpp 10

Fehler 3 Fehler C4430: fehlender Typspezifizierer - int angenommen. Hinweis: C++ unterstützt nicht standardmäßig-int c: \ Benutzer \ suarabh17g \ Dokumente \ Visual Studio 2010 \ Projekte \ fnptr \ fnptr \ fnptr.cpp 10

Bitte lassen Sie mich eine mögliche Antwort wissen. Vielen Dank im Voraus, Saurabh

Antwort

3

Sie sollten eine Struktur deklarieren, bevor Sie sie verwenden können.

Fügen Sie einfach struct gStruct; vor der typedef, und es wird gut.

+0

Danke asaelr .. Es hat funktioniert! Es gab jedoch noch einen weiteren Fehler. Die Funktionszeigerdefinition enthielt keinen Verweis auf die Struktur. –

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