2010-06-20 25 views
5

कक्षा वस्तुओं के लिए अस्थिरता का उपयोग किया जा सकता है? तरह:अस्थिर वर्ग वस्तु को परिभाषित करना

volatile Myclass className; 

समस्या यह है कि यह संकलन नहीं करता है, हर जगह जब कुछ विधि शुरू हो जाती है, त्रुटि का कहना है: त्रुटि C2662: 'समारोह': 'अस्थिर MyClass से' इस 'सूचक परिवर्तित नहीं कर सकते MyClass & '' में

क्या समस्या यहाँ है और यह कैसे हल करने के लिए है?

संपादित करें:

class Queue { 
      private: 
       struct Data *data; 
       int amount; 
       int size; 
      public: 
       Queue(); 
       ~Queue(); 
       bool volatile push(struct Data element); 
       bool volatile pop(struct Data *element); 
       void volatile cleanUp(); 
      }; 
    ..... 
    volatile Queue dataIn; 

     ..... 

    EnterCriticalSection(&CriticalSection); 
    dataIn.push(element); 
    LeaveCriticalSection(&CriticalSection); 
+0

ध्यान दें कि सी ++ में, 'अस्थिर' थ्रेड-सुरक्षा की गारंटी नहीं देता है। यह अलग है, उदाहरण के लिए, .NET, जहां यह करता है। – sbi

उत्तर

12

हाँ, आप कर सकते हैं, लेकिन तब आप उसके एकमात्र सदस्य कार्यों कि volatile (बस const कीवर्ड की तरह) घोषित किया गया है कह सकते हैं।

struct foo { 
    void a() volatile; 
    void b(); 
}; 

volatile foo f; 
f.a(); // ok 
f.b(); // not ok 

संपादित अपने कोड के आधार पर: उदाहरण के लिए: - volatile सदस्य समारोह है कि एक bool volatile (= volatile bool) रिटर्न

bool volatile push(struct Data element); 

एक गैर की घोषणा की। आप

bool push(struct Data element) volatile; 
+2

कक्षा में घोषित कन्स्ट्रक्टर और विनाशक और चर (गुण) के बारे में क्या? – maximus

+0

के रूप में आप ने कहा कि मैंने किया, लेकिन वैसे भी एक ही त्रुटि संदेश .. – maximus

+2

@maximus, निर्माणकर्ता और विनाशकर्ता साथ 'volatile' (या' const') अतिभारित नहीं किया जा सकता है, और सदस्य चर वर्ग उदाहरण से इन गुणों के वारिस। अपने त्रुटि संदेशों के बारे में, कृपया उस सटीक कोड को पोस्ट करें जिसका आप उपयोग कर रहे हैं। –

7

चाहते मुझे लगता है कि वह

  bool push(struct Data element) volatile; 

बजाय

  bool volatile push(struct Data element); 

के अलावा एक नज़र यहाँ http://www.devx.com/tips/Tip/13671

+0

बहुत बहुत धन्यवाद! यह काम करता हैं! – maximus

2

सी ++ व्याकरण में है कहने के लिए, "अस्थिर" और "का मतलब कॉन्स "को" सीवी संशोधक "कहा जाता है। इसका मतलब है "अस्थिर" सटीक रूप से उसी तरह से काम करता है जैसे कि "कॉन्सटेक्टिक पॉइंट ऑफ व्यू" से। आप सभी "अस्थिर" को "कॉन्स्ट" के साथ प्रतिस्थापित कर सकते हैं, तो आप समझ सकते हैं कि आपका कोड क्यों संकलित करता है या नहीं।

0

हाँ। हम प्रयोग कर सकते हैं। कृपया संशोधित कोड देखें। मुझे आशा है कि इसे अभी काम करना चाहिए।

class Queue { 
      private: 
       struct Data *data; 
       int amount; 
       int size; 
      public: 
       Queue(); 
       ~Queue(); 
       bool push(struct Data element) volatile; 
       bool pop(struct Data *element) volatile; 
       void cleanUp() volatile; 
      }; 
..... 
volatile Queue dataIn; 

    ..... 

EnterCriticalSection(&CriticalSection); 
dataIn.push(element); 
LeaveCriticalSection(&CriticalSection); 
संबंधित मुद्दे