2012-03-11 11 views
5

जीसीसी के साथ वर्ग के struct इस कोड को भले ही मैं -std=c++11 ध्वज के साथ संकलन के बारे में शिकायत, और मेरे जीसीसी संस्करण माना जाता है कि अप्रतिबंधित यूनियनों का समर्थन करता है (> 4.6)।बेनामी संघ/निर्माता

union 
{ 
    struct 
    { 
     float4 I,J,K,T; 
    }; 
    struct 
    { 
     float4 m_lines[4]; 
    }; 
    struct 
    { 
     float m16f[16]; 
    }; 
    struct 
    { 
     float m44f[4][4]; 
    }; 
}; 

ध्यान दें कि फ्लोट 4 में एक गैर-डिफ़ॉल्ट कन्स्ट्रक्टर है जो 0 पैरामीटर लेता है।

class float4 
{ 
    public: 
     float4(); 
.... 
}; 

मैं क्या कर सकता था इसका कोई विचार? त्रुटि है:

<anonymous union>::<anonymous struct>::I’ with constructor not allowed in anonymous aggregate 
+0

अपने 'float4' वर्ग से निर्माता को हटाएं। –

+1

@KerrekSB: अच्छी पकड़: ठीक है, नहीं, मैं नहीं कर सकता :) – qdii

+5

C++ यह आपके संकलक –

उत्तर

0

यहां मुद्दा यह है कि अपने वर्ग float4 एक निर्माता है, पॉड की पुरानी सी ++ 03 परिभाषा के तहत यह एक गैर पॉड बनाने नहीं है। इसके बजाय, मुद्दा यह है कि आपके संघ और आपके संघ के भीतर structs अज्ञात हैं। यदि आप उन्हें बस नाम दें, तो यह काम करेगा:

union u 
{ 
    struct s1 
    { 
     float4 I,J,K,T; 
    }; 
    struct s2 
    { 
     float4 m_lines[4]; 
    }; 
    struct s3 
    { 
     float m16f[16]; 
    }; 
    struct s4 
    { 
     float m44f[4][4]; 
    }; 
}; 
+4

"यह काम करेगा"। वांछित लक्ष्य क्या है? आपने एक खाली संघ बनाया है। मुझे संदेह है कि यह वांछित था हालांकि। –

+1

धन्यवाद समाधान के लिए, लेकिन मैं अपने गुमनाम structs रखना चाहेंगे: इस संघ एक वर्ग के अंदर नेस्टेड है और अगर मैं नाम बदलने, मैं हर एक फोन का नाम बदलने के लिए होगा। यह कोड एमएसवीसी 10 पर ठीक काम करता है, मेरी इच्छा है कि मैं इसे सही तरीके से इलाज में जीसीसी को ट्विक कर सकता हूं। – qdii

+1

@qdii, समस्या यह है कि अनाम structs वैध C++ मान्य नहीं हैं, इसलिए यदि आप क्रॉस-प्लेटफ़ॉर्म कोड लिखने का प्रयास करते हैं तो आप इस तरह के कंपाइलर समस्याओं में भाग लेंगे। अज्ञात structs का पूरी तरह से उपयोग करने से बचने के लिए यह आपको बेहतर सेवा प्रदान करेगा। –

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