2012-07-19 19 views
6
struct mystruct 
{ 
    int i; 
    double f; 
} ; 

typedef mystruct myotherstruct; 

//the other .cpp file 
struct mystruct; //OK,this is a correct forward declaration. 
struct myotherstruct; // error C2371(in vc2k8): 'myotherstruct' : redefinition; different basic types 

हाय सब घोषित करें। मैं अपनेotherstruct घोषित क्यों नहीं कर सकता?टाइपपीफ प्रकार

+1

http://stackoverflow.com/questions/804894/forward-declaration-of-a-typedef-in-c – Jeeva

उत्तर

1

myotherstruct पहचानकर्ता एक struct टैग नहीं है, यह अपने आप ही अधिकार में एक प्रकार का नाम है। आप इसे struct कीवर्ड के बिना उपयोग करते हैं। एक बार परिभाषित होने पर, नाम को struct टैग के लिए पुन: उपयोग नहीं किया जा सकता है। आपके उदाहरण में, आप myotherstruct प्रकार को अग्रेषित नहीं कर रहे हैं, आप टैग myotherstruct के साथ अग्रेषित कर रहे हैं, जो आपको एक त्रुटि देता है क्योंकि myotherstruct नाम typedef के लिए पहले से ही लिया जा चुका है।

+0

क्या एक स्ट्रक्चर टैग प्रकार के नाम के बराबर है? mystruct m; –

+0

@LeonhartSquall उत्सुकता से, इस प्रश्न का उत्तर इस बात पर निर्भर करता है कि यह सी ++ या सी है: सी ++ में, संरचना का टैग 'typedef' के बिना नाम के रूप में उपयोग किया जा सकता है, जबकि सी में आपको पहले टाइप किया जाना चाहिए। – dasblinkenlight

+0

एक स्ट्रक्चर टैग प्रकार के नाम के बराबर है? जब मैं ऑब्जेक्ट को परिभाषित करने के लिए mystruct का उपयोग करता हूं: mystruct m; मुझे हमेशा लगता है कि Mystruct एक प्रकार का नाम है। और मुझे कभी नहीं पता कि यह एक स्ट्रक्चर टैग है। मैं स्ट्रक्चर टैग को कैसे अंडरसायर कर सकता हूं। –

1

आप टाइप किए गए struct की आगे की घोषणा के बिना typedefs घोषित नहीं कर सकते हैं। आप पहली बार आगे की घोषणा करनी चाहिए struct और फिर typedef

struct mystruct; 
typedef mystruct myotherstruct; 
संबंधित मुद्दे