c++ - operator - ऑपरेटर क्या है




सी++ ऑपरेटर अस्पष्टता (2)

अस्पष्टता से छुटकारा पाने के लिए बहुत मुश्किल है यह आसानी से प्रत्यक्ष [] पहुंच के रूप में व्याख्या कर सकता है या सरणी अनुक्रमण द्वारा पीछा किए जाने वाले कास्ट-फ्लोट *

मेरी सलाह है कि ऑपरेटर GLfloat * को छोड़ दें। यह सिर्फ इस तरह फ्लोट करने के लिए असंतत डाले हुए मुसीबतों के लिए पूछ रहा है। अगर आपको सीधे फ़्लोट्स का उपयोग करना है, तो वेक्टर 4 में एक get () (या अपनी पसंद का कुछ अन्य नाम) विधि बनाएं जिससे कि कच्चे फ़्लोट्स के नीचे एक पॉइंटर लौट आए।

अन्य यादृच्छिक सलाह: अपनी सदिश वर्गों को फिर से बदलने के बजाय, आपको "इल्मबेस" पैकेज में उत्कृष्ट लोगों का उपयोग करना चाहिए जो ओपेनएक्सआर का हिस्सा है

मुझे माफ़ कर दो, क्योंकि मैं सी + + के लिए काफी नया हूँ, लेकिन मुझे ऑपरेटर अस्पष्टता के बारे में कुछ परेशानी हो रही है। मुझे लगता है कि यह संकलक-विशिष्ट है, मेरे डेस्कटॉप पर संकलित कोड के लिए। हालांकि, यह मेरे लैपटॉप पर संकलन करने में विफल रहता है। मुझे लगता है कि मुझे पता है कि क्या गलत हो रहा है, लेकिन मुझे इसके चारों ओर एक शानदार तरीका दिखाई नहीं देता। कृपया मुझे बताएं कि क्या मैं एक स्पष्ट गलती कर रहा हूं किसी भी तरह, यहां मैं क्या करने की कोशिश कर रहा हूं:

मैंने वेक्टर 4 नामक अपना वेक्टर क्लास बनाया है जो इस तरह दिखता है:

class Vector4
{
 private:
   GLfloat vector[4];
 ...
}

तो मेरे पास ये ऑपरेटर हैं, जो समस्या पैदा कर रहे हैं:

operator GLfloat* () { return vector; }

operator const GLfloat* () const { return vector; }

GLfloat& operator [] (const size_t i) { return vector[i]; }

const GLfloat& operator [] (const size_t i) const { return vector[i]; }

मेरे पास रूपांतरण ऑपरेटर है ताकि मैं अपने वेक्टर 4 वर्ग का उदाहरण glVertex3fv को पास कर सकूं, और मैं स्पष्ट कारणों के लिए सबस्क्रिप्ट कर रहा हूं। हालांकि, कॉल जो कि वेक्टर 4 को सबस्क्रिप्टिंग को कंपाइलर के लिए अस्पष्ट बनाते हैं:

enum {x, y, z, w}
Vector4 v(1.0, 2.0, 3.0, 4.0);

glTranslatef(v[x], v[y], v[z]);

यहां उम्मीदवार हैं:

candidate 1: const GLfloat& Vector4:: operator[](size_t) const
candidate 2: operator[](const GLfloat*, int) <built-in>

सब्स्क्रिप्ट ऑपरेटर पहले से ही वेक्टर 4 पर परिभाषित होने पर पहली बार मेरे वैक्टर 4 को जीएलफ्लॉट में बदलने की कोशिश क्यों करेगा? क्या इसके चारों ओर एक आसान तरीका है कि टाइपकास्टिंग की आवश्यकता नहीं है? क्या मैं सिर्फ एक मूर्ख गलती कर रहा हूँ? किसी भी सहायता के लिए अग्रिम धन्यवाद।


आप ऑपरेटर के लिए "const आकार_टी" क्यों चल रहे हैं []?





operator-keyword