Friday, 15 July 2011

c++ - Member value changes between successive calls of the same function -


मेरे पास एक संज्ञानात्मक एंटीटी वर्ग है, इस तरह परिभाषित:

  कक्षा संज्ञानात्मक दूरी: सार्वजनिक वस्तु {सार्वजनिक: संज्ञानात्मक अंत (FuzzyCognitiveMap fcm, SystemState s); ~ संज्ञानात्मक अंतर (); टेम्पलेट & lt; typename T & gt; शून्य रजिस्टर बदलें (std :: स्ट्रिंग संदर्भ, टी मान); बूल ऑपरेटर! = (कॉन्स्ट संज्ञानात्मक एंटीटी & amp; आरए) कॉन्स्ट; निजी: FuzzyCognitiveMap m_fuzzyCognitiveMap; SystemState m_systemState; Std :: vector & lt; सिस्टमस्टेट & gt; RunFuzzyCognitiveMap (); };  

जैसा कि दिखाया गया है, एक संज्ञानात्मक अंतराल में SystemState ऑब्जेक्ट है, जिसके बदले में संकल्पना का एक सदिश है ऑब्जेक्ट्स (केवल सबसे प्रासंगिक लाइनें दिखाई जाती हैं):

  class SystemState {public: SystemState (); ~ सिस्टमस्टेट (); शून्य AddConcept (संकल्पना c) {m_L.push_back (c); } Std :: vector & lt; Concept & gt; m_L; };   संज्ञानात्मक अंतः :: रजिस्टर बदलें  के अंदर, मैं संभावित कारण के रूप में एक संकल्पना को चिह्नित करता हूं ( Concept :: IsPotentialCause (bool)  जो पारित मूल्य के साथ केवल एक निजी सदस्य निर्धारित करता है): 

  टेम्पलेट & lt; typename T & gt; शून्य संज्ञानात्मक अंतः :: रजिस्टरचेंज (std :: स्ट्रिंग संदर्भ, टी मान) {std :: string name = context.substr (context.find_last_of ("/") +1); Int pos = m_systemState.FindConcept (नाम); यदि (pos & gt; -1) {int intValue = value? 1: 0; M_systemState.m_L [pos] .SetConceptValue (intValue, गलत); अगर (m_systemState.m_L [pos]। चेक व्हायरेशन ()) {m_systemState.m_L [pos] .IsPotentialCause (सत्य); // इस अवधारणा को संभावित कारण के रूप में चिह्नित करें (int कारण = 0; कारण & lt; m_systemState.GetSize (); कारण ++) {if ((cause! = Pos) & amp; (m_systemState.m_L [कारण] .MayBeCause ))) {M_fuzzyCognitiveMap.UpdateFuzzyCognitiveMapEntry (कारण, स्थिति, m_systemState); M_systemState.m_L [कारण] .IsPotentialCause (गलत); }}}}}  

क्या होता है, जैसे कि रजिस्टर बदलें को दूसरी बार कहा जाता है, संकल्पना जिसे संभावित रूप में चिह्नित किया गया था कारण, अधिक चिह्नित नहीं है। मैं जीडीबी चलाने की कोशिश कर रहा था और मुझे यकीन है कि वह सदस्य कहीं और सेट नहीं किया गया है।

मुझे यकीन नहीं है कि इस छोटी सी जानकारी के लिए मुझे इस तरह के व्यवहार के बारे में कुछ संकेत देने के लिए पर्याप्त है (मैं नहीं SystemState और संकल्पना दोनों वर्गों के कोड के साथ पोस्ट को बाढ़ना चाहते हैं।

सादर, जिपर

अगर यह एक बहु-थ्रेडेड सिस्टम था, तो मैं कहूंगा कि यह साझा की गई एक क्लासिक केस की तरह लगता है, जो अयोग्य राज्य है जो ठीक से सिंक्रनाइज़ नहीं हुआ था।

यदि आपके पास बहु-थ्रेडेड स्थिति नहीं है, तो मैं कहूंगा कि उस चर पर एक घड़ी सेट करें और देखें कि यह क्या बदलता है।


No comments:

Post a Comment