2011-09-29 21 views
5

मुझे बताया जा रहा है कि मैं कक्षा कार्य में 'इस' कीवर्ड का उपयोग नहीं कर सकता। मैं सी # से आ रहा हूं और मुझे इस काम में उपयोग किया जाता है, लेकिन संकलक मुझे बताता है कि इसका उपयोग नॉनस्टैटिक सदस्य कार्यों के भीतर ही किया जा सकता है।एक गैरस्टिक सदस्य समारोह क्या है?

D3DXVECTOR3 position; 

void Position(D3DXVECTOR3 position) 
{ 
    this.position = position; 
} 
+0

आप यकीन है कि यह ग # में काम कर रहे हैं चाहिए था तो क्या होगा? सी # में, एक 'वर्ग समारोह' को 'स्थैतिक विधि' कहा जाता है, और आप उन में 'इस' का उपयोग नहीं कर सकते हैं? – muratgu

+0

हाँ मैंने कन्स्ट्रक्टर में कक्षाओं के चर के संदर्भ में यह हर समय किया है, या कन्स्ट्रक्टर अलग है? – SirYakalot

+0

शायद आपको इस विधि से संबंधित वर्ग दिखाना चाहिए - जो आप कर रहे हैं यह स्पष्ट करने में मदद कर सकते हैं कि आप क्या कर रहे हैं – Useless

उत्तर

11

यह सूचक ऑब्जेक्ट का पता है।

D3DXVECTOR3 position; 

void YourClassNameHere::Position(D3DXVECTOR3 position) 
{ 
    this->position = position; 
} 

काम करना चाहिए।

D3DXVECTOR3 position; 

void YourClassNameHere::Position(D3DXVECTOR3 position) 
{ 
    (*this).position = position; 
} 

भी काम करना चाहिए।

+0

@ AndréCaron Heh, ध्यान नहीं दिया। मैंने मार्कबी के बदलावों को शामिल करने के लिए संपादित किया। – Pubby

+0

@ AndréCaron इसके अलावा हम उसे नहीं जानते हैं, क्योंकि उन्होंने हमें कोई संदर्भ नहीं दिया है। –

14

C++ में आप वर्ग के नाम के साथ अपने Position समारोह अर्हता प्राप्त करने की जरूरत है:

void YourClassNameHere::Position(D3DXVECTOR3 position)

इसके अलावा @ Pubby8 के जवाब this से

एक सूचक, नहीं एक संदर्भ ताकि आप के बजाय this->position उपयोग करने की आवश्यकता है (या उन पैरामीटर नामों का उपयोग करने पर विचार करें जो क्लास सदस्यों को छाया नहीं देते हैं - मुझे अपने वर्ग के सदस्यों पर पीछे _ का उपयोग करना पसंद है)।

इसके अलावा, सी ++ डिफ़ॉल्ट रूप से संदर्भ द्वारा पास नहीं है, इसलिए यदि D3DXVECTOR3 एक जटिल प्रकार आप के आसपास काफी मात्रा में डेटा कॉपी करना होगा है। इसके बजाय इसे const D3DXVECTOR3& position के रूप में पास करने पर विचार करें।

3

न केवल Position एक मुफ्त फ़ंक्शन (कक्षा से जुड़े नहीं) जिस तरह से आपने लिखा है, लेकिन this भी एक सूचक है, संदर्भ नहीं।

D3DXVECTOR3 position; 

void ClassName::Position(D3DXVECTOR3 position) 
{ 
    this->position = position; 
} 

या, कि एक निर्माता होने के लिए,

ClassName::ClassName(D3DXVECTOR3 p) : position(p) 
{ 
} 
संबंधित मुद्दे