2011-07-03 15 views
7

सभी को लेने वाले फ़ंक्शन का मूल्यांकन नहीं करता है! मैं नक्शा कंटेनर में चैनल डेटा का एक समूह बनाए रखता हूं, जिसमें से एक चैनल चैनल डेटा को अपने चैनले नाम से एक्सेस किया जा सकता है। इसके संबंध में, मैं एक साधारण कार्य GetIRChannelData लिखता हूं (कृपया निम्नलिखित कोड देखें)। जब compliing, बयान pusIRChannelData = cit->second(); throwed जोत्रुटि C2064: शब्द 0 तर्क

error C2064: term does not evaluate to a function taking 0 arguments 

सभी समारोह पढ़ ऐसा करने के लिए एक त्रुटि, कुछ भी नहीं लेकिन नक्शा कंटेनर में किसी विशेष चैनल के नाम/ID की खोज, और यह एक अस्थायी सूचक के लिए डेटा सूचक आवंटित करने के लिए है अगर मिल गया। क्या आप कृपया मुझे दिखाएंगे कि क्या गलत है?

const Array2D<unsigned short>* GetIRChannelData(std::string sChannelName) const 
{ 
    const Array2D<unsigned short>* pusIRChannelData = NULL; 

    for (std::map<std::string, Array2D<unsigned short>* >::const_iterator cit = m_usIRDataPool.begin(); cit != m_usIRDataPool.end(); ++cit) 
    { 
     std::string sKey = cit->first; 

     if (sKey == sChannelName) 
     { 
      pusIRChannelData = cit->second(); // Error occurred on this line 
      break; 
     } 
    } 

    return pusIRChannelData; 
} 
+1

कोई विशेष कारण है कि आप कुंजी की तलाश में सभी तत्वों के माध्यम से लूपिंग के बजाय 'std :: map' की' find' विधि का उपयोग नहीं कर रहे हैं? –

+0

एक साइड नोट के रूप में, प्रकार उपनाम वास्तव में कोड को और अधिक पठनीय बनाने में सहायता करते हैं: 'typedef std :: map <...> डेटापूल; के लिए (DataPool :: const_iterator ... ' –

उत्तर

12

त्रुटि संदेश बहुत स्पष्ट है ... आप एक फ़ंक्शन को कॉल करते हैं जो मौजूद नहीं है। map::iterator अंक std::pair पर, जिसमें दो सदस्य वस्तुएं हैं, first और second। ध्यान दें कि ये कार्य नहीं हैं। प्रश्न में लाइन से () निकालें और त्रुटि दूर जाना चाहिए।

+0

यह' std :: map' iterator है, नहीं? 'पहला' कुंजी है, जिसे 'std :: string' के रूप में घोषित किया गया है, और' दूसरा' मान है। – geekosaur

+0

@geekosaur: हाँ, मैंने लूप प्रारंभिक को गलत तरीके से पढ़ा, सोचा कि वह मानचित्र के मूल्य प्रकार पर पुनरावृत्ति कर रहा था। अब सही होना चाहिए। –

+0

धन्यवाद, डेनिस। मैंने इतनी कम ग्रेड गलती की है! – GoldenLee

3

ऐसा लगता है कि cit->second फ़ंक्शन पॉइंटर की पहचान नहीं करता है। आपके पुनरावर्तक की परिभाषा का दावा है कि यह (Array2D<unsigned short>) पर सूचक है; pusIRChannelData एक (Array2D *) है, इसलिए आप शायद के बजाय cit->second चाहते हैं (जो आपके (Array2D *) को फ़ंक्शन के रूप में आमंत्रित करने का प्रयास करता है)।

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