2013-01-22 78 views
6

मेरे पास क्यूटी 4.7.4 के साथ वीएस -2010 में सी ++ प्रोजेक्ट है और मुझे अक्सर इंटेलिसेन्स के साथ समस्याएं होती हैं (जैसा कि हम सभी करते हैं ...)। एक विशिष्ट समस्या यह है कि कभी-कभी फ़ंक्शन बॉडी (.cpp फ़ाइल में) नहीं मिल सकती है। अगर मैं उस फ़ंक्शन बॉडी में क्लिक करता हूं, तो ड्रॉपडाउन बॉक्स (जो आमतौर पर आपके द्वारा किए गए फ़ंक्शन को दिखाता है) खाली है।Q_FOREACH मैक्रो VS2010 इंटेलिजेंस क्यों तोड़ सकता है?

आज मैंने foreach() कथन (क्यूटी मैक्रो Q_FOREACH) जोड़ने के बाद इस व्यवहार को सही तरीके से देखा। मैं तो एक इसी for(int i = 0; i < ...) और IntelliSense साथ foreach() मैक्रो प्रतिस्थापित तुरंत फिर से समारोह का प्रदर्शन किया।

तो मैं जानना चाहते हैं:

  1. किसी इस व्यवहार को सत्यापित करने और मुझे एक टिप्पणी में इतना बता सकते हैं?
  2. क्यों होता है?
  3. वहाँ एक समाधान मुझे Q_FOREACH उपयोग करने के लिए जारी रख सकते हैं जो है?
+1

के लिए मैं यह सत्यापित नहीं कर सकता के रूप में मैं केवल है 2008 और इंटेलिसेंस हमारी बड़ी परियोजना से बहुत अभिभूत है कि इसमें इतने सारे मुद्दे हैं कि इसे काम करना मुश्किल है। लेकिन यहां मैं जो कर रहा हूं: मैं विजुअल स्टूडियो में क्यूटी निर्माता और * संकलन और डिबगिंग * में * विकसित कर रहा हूं। यह मेरे लिए दो दुनिया के सबसे अच्छे संयोजन के रूप में दिखाई दिया। जाहिर है आपको परियोजनाओं को प्रबंधित करने की जरूरत है।प्रो 'फाइलें और' qmake -tp vc -recursive .pro' या विज़ुअल स्टूडियो –

+0

में जोड़ने के दौरान उन्हें परिवर्तित करें, जब आप 'fore_ (' '' 'Q_FOREACH' को प्रतिस्थापित करते हैं और 'CONFIG + = no_keywords'' निर्दिष्ट करते हैं तो क्या होता है ?? – UmNyobe

+0

@UmNyobe मैंने बिना किसी प्रभाव के 'Q_FOREACH' द्वारा' foreach() 'को बदलने की कोशिश की। मुझे डर है कि मुझे नहीं पता कि 'no_keywords' कैसे जोड़ना है, क्योंकि वीएस -2010 में कोई' .pro' फ़ाइलें नहीं हैं। क्या आप जानते हैं कि प्रोजेक्ट प्रॉपर्टी पेज में कौन सा क्षेत्र है? हालांकि, 'no_keywords' का अर्थ यह होगा कि मुझे 'Q_SIGNAL' द्वारा सभी' सिग्नल 'को प्रतिस्थापित करना होगा - यह सभी foreachs() को फिर से लिखने से कहीं अधिक बोझिल है। –

उत्तर

8

आप cpp.hint 'फ़ाइलों की अवधारणा का उपयोग करने के लिए है।

असल में, आपको परेशान मैक्रोज़ को 'cpp.hint' नाम की फ़ाइल में रखना होगा और उस फ़ाइल को अपनी समाधान निर्देशिका में रखना होगा (जो मेरे लिए काम नहीं करता - गैर-मानक प्रोजेक्ट लेआउट शायद) या माता-पिता- । निर्देशिका जहां अपने कोड फ़ाइलों में रहते हैं (मेरे लिए काम किया)

है कि फाइल में आप सिर्फ बिना दाएँ हाथ की ओर परेशानी मैक्रो शब्दों में कहें, आपके मामले में तो:

#define foreach() 

या

शायद बेहतर
#define Q_FOREACH(variable, container) 
#define foreach(...) 
etc. 

नोट, कि आपको cpp.hint फ़ाइल में परिभाषा डालने के बाद सेट करने के लिए प्रभाव के लिए फ़ंक्शन के साथ रीस्कैन या पुनरारंभ या फ़ॉल करना पड़ सकता है।

अद्यतन: दरअसल, मुझे अभी पता चला है कि मुझे एक .cpp फ़ाइल में कुछ बदलाव करना है (उदाहरण के लिए एक नई लाइन जोड़ना) प्रभाव डालने के लिए। फिक्स स्वचालित रूप से लागू नहीं होता है।

मूल लिंक है: http://msdn.microsoft.com/en-us/library/dd997977.aspx

मुसीबत का कारण है कि Intellisense प्रदर्शन होगा (संभावित) नाटकीय रूप से कमी अगर यह एक परियोजना में सभी मैक्रो पार्स करने के लिए किया था, तो यह केवल उन लोगों में स्पष्ट रूप से दिए गए पार्स करता है ' cpp.hint '।

मूल माइक्रोसॉफ्ट टेक्स्ट का कहना है कि आप किसी स्रोत फ़ाइल की मूल निर्देशिका से पथ में स्रोत फ़ाइल में निर्देशिका का उपयोग कर सकते हैं। एक सामान्य दृश्य सी ++ प्रोजेक्ट में, मूल निर्देशिका में समाधान होता है या परियोजना फाइल। "

आपको कम से मुख्य 'cpp.hint' फ़ाइल पा सकते हैं 'सी: \ Program Files (x86) \ माइक्रोसॉफ्ट विजुअल स्टूडियो 12.0 \ कुलपति \ vcpackages' संदर्भ

+0

यह बिल्कुल सही है। –