मुझे एक ताजा ओएसएक्स 10.4.11 + एक्सकोड 2.5 स्थापना में एक बेहद अजीब समस्या का सामना करना पड़ रहा है। मैंने इसे कम से कम टेस्ट केस में घटा दिया है। यहाँ test.cpp है:g ++ रहस्यमय रूप से विफल रहता है अगर एक .h एक निश्चित निर्देशिका में है
#include "macros.h"
int main (void)
{
return 1;
}
और यहाँ macros.h है:
#ifndef __JUST_TESTING__
#define __JUST_TESTING__
template<typename T> void swap (T& pT1, T& pT2)
{
T pTmp = pT1;
pT1 = pT2;
pT2 = pTmp;
}
#endif //__JUST_TESTING__
यह संकलित करता है तथा बस ठीक काम करता है अगर दोनों फ़ाइलें एक ही निर्देशिका में कर रहे हैं। हालांकि, अगर मैं में macros.h डाल/usr// gfc2 में शामिल हैं (यह मैं का उपयोग एक कस्टम पुस्तकालय का हिस्सा है) और test.cpp में #include बदलने के लिए, संकलन इस त्रुटि के साथ विफल:
/usr/include/gfc2/macros.h:4: error: template with C linkage
मैं शोध किया वह त्रुटि और अधिकांश टिप्पणियां "लटकते बाहरी सी" को इंगित करती हैं, जो कि बिल्कुल भी प्रतीत नहीं होती है।
मैं यहां एक पूर्ण नुकसान पर हूं। क्या किसी कारण से g ++ /usr/include/gfc2
में सब कुछ मानने के लिए है, भले ही यह एक .cpp फ़ाइल से शामिल है जो बाहरी "सी" कहीं भी नहीं कहता है?
कोई भी विचार?
संपादित करें: अगर मैं #include
में पूर्ण पथ का उपयोग यह संकलित करता है, यानी #include "/usr/include/gfc2/macros.h"
EDIT2: यह गलत हैडर सहित नहीं है। मैं प्रमाणित कर चुके हैं इस cpp
, g++ -E
, और नाम बदलने macros.h
foobarmacros.h
यह कुल, निराशाजनक, अनौपचारिक मिलियन-टू-वन-इन-द-डार्क है, लेकिन निर्देशिका नाम से "सी" को हटाने का प्रयास करें। :) – datageist
"set | grep -i शामिल" के परिणामों को पोस्ट करने का प्रयास करें। –
@datageist - धन्यवाद, लेकिन इससे कोई फर्क नहीं पड़ता। विचित्र रूप से पर्याप्त, यह संकलित करता है अगर मैं इसे अपने पूर्ण पथ का उपयोग करके शामिल करता हूं। हमम ... – ggambett