2012-06-13 15 views
5

का तत्व नहीं है, मुझे जीसीसी के तहत कोड संकलित करने में कुछ अजीब त्रुटियां मिलीं। यह मुझे बताता है कि std::function मौजूद नहीं है।फ़ंक्शन std

मैं निम्नलिखित कोड के साथ त्रुटि को पुन: कर सकते हैं:

#include <functional> 
#include <stdio.h> 

void test(){ printf ("test"); } 

int main() { 
    std::function<void()> f; 
    f = test; 
    f(); 
} 

अगर मैं (cygwin से) जीसीसी चलाएँ:। (मेरी त्रुटि संदेश जर्मन था, इसलिए मैं इसे अनुवाद यह एक अंग्रेजी पर ध्वनि अलग हो सकता है जीसीसी)

$ gcc test.cpp 
test.cpp: in function "int main(): 
test.cpp:7:3: Error: "function" is not an element of "std"« 
test.cpp:7:25: Error: "f" was not defined in this scope 

एमएसवीसी के साथ इसे सफलतापूर्वक संकलित किया गया। कृपया मुझे बताएं कि मैं अपने कोड में क्या गलत कर रहा हूं।

जोहानिस

+1

क्या आप सी ++ 11 के साथ संकलित हैं? – chris

+0

नहीं, अगर मैं'gcc -std = C++ 0x test.cpp 'करता हूं तो यह लिंकर त्रुटियों का एक गुच्छा फेंकता है, मैं – EGOrecords

+0

को समझ नहीं सका, आपको 'g ++', 'gcc' नहीं, नीचे दिए गए उत्तरों देखें। – juanchopanza

उत्तर

13

यह संकलित रूप में:

g++ test.cpp -std=c++0x 

-std=c++0x क्योंकि आप सी ++ 11 सुविधाओं का उपयोग कर रहे की जरूरत है, अन्यथा g++ test.cpp पर्याप्त है।

सुनिश्चित करें कि आपके पास जीसीसी का नवीनतम संस्करण है। आप के रूप में संस्करण की जांच कर सकते हैं: आप C++ मोड में संकलन करने की जरूरत

g++ --version 
+1

"यदि आप gcc test.cpp का उपयोग करते हैं, तो यह सी प्रोग्राम मानता है!" सच नहीं। जीसीसी फ़ाइल एक्सटेंशन से भाषा का अनुमान लगाता है। यदि यह एक सी प्रोग्राम ग्रहण करता है, तो त्रुटि संदेश काफी अलग होगा। 'std :: function' सी में एक वाक्यविन्यास त्रुटि होगी। यह' std' नेमस्पेस में मौजूद 'फ़ंक्शन' के बारे में कोई संदेश नहीं देगा। सच यह है कि 'gcc' ('g ++' के विपरीत) स्वचालित रूप से C++ मानक लाइब्रेरी के विरुद्ध लिंक नहीं होता है, इसलिए यदि आप उपयुक्त -l ध्वज मैन्युअल रूप से निर्दिष्ट नहीं करते हैं तो आपको लिंकर त्रुटियां मिलेंगी। – sepp2k

3

, और C++11 मोड में। तो आपको g++ और -std ध्वज c++0x पर सेट करने की आवश्यकता है।

जी ++ test.cpp -std = C++ 0x

तुम भी जीसीसी 4.7 के बाद से -std=c++11 उपयोग कर सकते हैं।

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