2009-05-27 18 views
8

सूचक से सदस्य struct तक पहुँचने मैं एक सदस्य structs चर का उपयोग करने की कोशिश कर रहा हूँ, लेकिन मैं वाक्य रचना सही पाने के लिए नहीं कर पा रहे वाक्य विन्यास। दो संकलन त्रुटियों पीआर। पहुंच हैं: त्रुटि सी 2274: 'फ़ंक्शन-स्टाइल कास्ट': '।' के दायीं तरफ अवैध। ऑपरेटर त्रुटि C2228:'otherdata 'के बाईं ओर कक्षा/संरचना/संघ होना चाहिए मैंने कई बदलावों की कोशिश की है, लेकिन कोई भी सफल नहीं है।सी ++: वर्ग

#include <iostream> 

using std::cout; 

class Foo{ 
public: 
    struct Bar{ 
     int otherdata; 
    }; 
    int somedata; 
}; 

int main(){ 
    Foo foo; 
    foo.Bar.otherdata = 5; 

    cout << foo.Bar.otherdata; 

    return 0; 
} 

उत्तर

15

आप केवल वहाँ एक struct को परिभाषित, नहीं एक का आवंटन। इस प्रयास करें:

class Foo{ 
public: 
    struct Bar{ 
     int otherdata; 
    } mybar; 
    int somedata; 
}; 

int main(){ 
    Foo foo; 
    foo.mybar.otherdata = 5; 

    cout << foo.mybar.otherdata; 

    return 0; 
} 

आप अन्य वर्गों में struct का पुन: उपयोग करना चाहते हैं, तो आप भी struct के बाहर परिभाषित कर सकते हैं:

struct Bar { 
    int otherdata; 
}; 

class Foo { 
public: 
    Bar mybar; 
    int somedata; 
} 
+0

धन्यवाद, पूरी तरह से है कि भूल गया। और एक आकर्षण की तरह काम करता है। –

+4

कोड बिल्कुल बराबर नहीं है। पहले उदाहरण में, बार स्ट्रक्चर का नाम वास्तव में Foo :: Bar है। –

+0

आप सही हैं, नील, मेरा जवाब संपादित किया। – schnaader

8

Bar आंतरिक संरचना Foo अंदर परिभाषित किया गया है। Foo ऑब्जेक्ट का निर्माण निश्चित रूप से Bar के सदस्यों को नहीं बनाता है। आपको Foo::Bar सिंटैक्स का उपयोग करके बार की ऑब्जेक्ट स्पष्ट रूप से बनाने की आवश्यकता है।

Foo foo; 
Foo::Bar fooBar; 
fooBar.otherdata = 5; 
cout << fooBar.otherdata; 

अन्यथा,

Foo कक्षा में सदस्य के रूप में बार उदाहरण बनाएँ।

class Foo{ 
public: 
    struct Bar{ 
     int otherdata; 
    }; 
    int somedata; 
    Bar myBar; //Now, Foo has Bar's instance as member 

}; 

Foo foo; 
foo.myBar.otherdata = 5; 
+0

मुझे पारंपरिक शैली की तुलना में यह शैली बेहतर पसंद है "संरचना {} "। –

5

आप नेस्टेड संरचना बनाते हैं, लेकिन आप कक्षा के भीतर इसका कोई भी उदाहरण कभी नहीं बनाते हैं। आप कहते हैं कि करने के लिए कुछ तरह की जरूरत है:

class Foo{ 
public: 
    struct Bar{ 
     int otherdata; 
    }; 
    Bar bar; 
    int somedata; 
}; 

तो आप कह सकते हैं:

foo.bar.otherdata = 5; 
1

आप केवल घोषित कर रहे हैं फू :: बार लेकिन आप इसे का दृष्टांत नहीं है (यकीन नहीं है कि अगर सही शब्दावली है)

उपयोग के लिए यहाँ देखें:

#include <iostream> 

using namespace std; 

class Foo 
{ 
    public: 
    struct Bar 
    { 
     int otherdata; 
    }; 
    Bar bar; 
    int somedata; 
}; 

int main(){ 
    Foo::Bar bar; 
    bar.otherdata = 6; 
    cout << bar.otherdata << endl; 

    Foo foo; 
    //foo.Bar.otherdata = 5; 
    foo.bar.otherdata = 5; 

    //cout << foo.Bar.otherdata; 
    cout << foo.bar.otherdata << endl; 

    return 0; 
} 
0
struct Bar{ 
     int otherdata; 
    }; 

यहां आपने अभी एक संरचना परिभाषित की है लेकिन इसकी कोई वस्तु नहीं बनाई है। इसलिए जब आप foo.Bar.otherdata = 5; कहते हैं तो यह संकलक त्रुटि है। Bar m_bar; तरह struct बार की एक वस्तु बनाने और उसके बाद का उपयोग Foo.m_bar.otherdata = 5;

संबंधित मुद्दे