2011-10-03 11 views
8

मैं इस त्रुटि जब stl_vector.h का उपयोग कर जी का उपयोग कर ++ संकलित करने के लिए हो रही है। लिनक्स पर मैं कर रहा हूँ।जी ++ उम्मीद अयोग्य-आईडी से पहले '(' टोकन

{ 
    if (max_size() - size() < __n) 
    __throw_length_error(__N(__s)); 

    const size_type __len = size() + std::max(size(), __n); //THE ERROR IS ON THIS LINE! 
    return (__len < size() || __len > max_size()) ? max_size() : __len; 
} 

usr/include/c++/4.5/bits/stl_vector.h:1143:40: error: expected unqualified-id before ‘(’ token

मैं सुनिश्चित नहीं हूं कि मैं क्यों 'm यह त्रुटि मिल रही है, मैं एक बहुत खोज की है और कुछ "समान" समस्या नहीं पाई, लेकिन मैं मेरा समाधान नहीं कर सकते

संपादित करें:।

In file included from /usr/include/c++/4.5/vector:65:0, 
      from ../../RL_Toolbox/include/caction.h:34, 
      from ../../RL_Toolbox/include/cagent.h:35, 
      from shortestpathQLearning.cpp:42: 
/usr/include/c++/4.5/bits/stl_vector.h:1143:40: error: expected unqualified-id before ‘(’ token 
: तो यहाँ त्रुटि लॉग है

आप पिछले त्रुटि लॉग है कि "वेक्टर" इस ​​तरह हैडर "caction.h" से बुलाया जाता है में देख सकते हैं:

//THESE ARE THE INCLUDES IN "caction.h" 
#ifndef CACTION_H 
#define CACTION_H 
#include <stdio.h> 
#include <vector> //HERE IT CALLS <vector> 
#include <list> 
#include <map> 
#include "cbaseobjects.h" 

तो वेक्टर कॉल बिट्स इस तरह/stl_vector.h:

#ifndef _GLIBCXX_VECTOR 
#define _GLIBCXX_VECTOR 1 

#pragma GCC system_header 

#include <bits/stl_algobase.h> 
#include <bits/allocator.h> 
#include <bits/stl_construct.h> 
#include <bits/stl_uninitialized.h> 
#include <bits/stl_vector.h>//HERE IT CALLS stl_vector.h 
#include <bits/stl_bvector.h> //Im actually getting the exact same error from stl_vector.h on this header 

वेक्टर (stl_vector और stl_bvector) से केवल अंतिम 2 शीर्षलेख मुझे एक ही त्रुटि देते हैं, बाकी ठीक हैं। कोई विचार?

आपकी मदद के लिए अग्रिम धन्यवाद।

+9

क्या आपके पास '# परिभाषित अधिकतम' या ऐसा कुछ है? – user786653

+0

बस अनुमान लगा रहा है, लेकिन कॉन्स्ट को हटाने का प्रयास करें। – Dabbler

+5

क्या आप सीधे 'stl_vector.h'' या 'वेक्टर' हेडर –

उत्तर

1

कभी भी डबल अंडरस्कोर से शुरू होने वाले पहचानकर्ताओं का उपयोग न करें, या अंडरस्कोर को अपरकेस अक्षर के बाद न करें, जब तक कि वे कार्यान्वयन द्वारा प्रदान नहीं किए जाते।

संकलक और/या मानक पुस्तकालय, __N, __s, __len, और इसके आगे का उपयोग करने को उनकी इच्छानुसार में अनुमति दी जाती है।

यह स्पष्ट नहीं है कि यह आपकी समस्या है, लेकिन देखें कि क्या होता है यदि आप उन सभी पहचानकर्ताओं को बदलते हैं।

संपादित: मैं गलत था, कोड तुम्हें तैनात कार्यान्वयन का हिस्सा है, इसलिए आरक्षित पहचानकर्ता के अपने प्रयोग पूरी तरह से उचित है।

/usr/include/c++/4.5/bits/stl_vector.h मेरे सिस्टम पर एक ही कोड है। सबसे अधिक संभावना है कि आपके अपने कोड में कुछ त्रुटि उत्पन्न कर रहा है। उदाहरण के लिए, यदि मैं

#include <bits/stl_vector.h> 

मुझे 156 त्रुटियां मिलती हैं। सही तरीका

#include <vector> 

है, लेकिन आप #define#include <vector> से पहले खास मैक्रो यह समस्या के कारण हो सकता है, तो आप देख रहे हैं।

हमें दिखाएं कोड, जो कि सबसे छोटी स्रोत फ़ाइल को कम करता है जो त्रुटि को प्रदर्शित करता है।

+3

वह कोड दिखा रहा है जो उसके कंपाइलर की मानक लाइब्रेरी के साथ आता है, इसलिए वह इसे बदल नहीं सकता है, न ही वह चाहिए। – ildjarn

+0

@ildjarn: काफी सही, धन्यवाद। मुझे खुद को ध्यान में रखना चाहिए था। –

+0

@ किथ थॉम्पसन I ने एक और विस्तृत स्पष्टीकरण जोड़ा। आपकी सहायता के लिए बहुत कुछ धन्यवाद – user977480

2

उपयोगकर्ता977480, यह देखते हुए कि "मुझे stl_vector.h का उपयोग करते समय यह त्रुटि मिल रही है", मुझे लगता है कि आपका कोड #include <bits/stl_vector.h> या #include <c++/4.5/bits/stl_vector.h> जैसे कुछ का उपयोग कर रहा है।

यह #include कथन आपकी समस्या का कारण है। आपको इसके बजाय #include <vector> का उपयोग करने की आवश्यकता है। stl_vector.h एक कार्यान्वयन विस्तार है और यह स्वयं ही काम नहीं करता है।vector शीर्षलेख फ़ाइल में बिट्स/stl_vector.h शामिल है, इसके बाद इसमें कुछ अन्य कार्यान्वयन विस्तार फ़ाइलें शामिल हैं, जिनमें std::max परिभाषित किया गया है।

+0

अरे, मैंने मुख्य पोस्ट में इस त्रुटि के बारे में थोड़ा और स्पष्टीकरण जोड़ा है, #include का उपयोग कर रहा हूं, लेकिन तब जब वेक्टर उस हेडर को कॉल करता है जब मैं संकलक त्रुटि प्राप्त करता हूं। – user977480

9

यह आपके कोड को नुकसान पहुंचाने वाले प्रीप्रोसेसर के कारण हो सकता है, शायद इसलिए कि आपके पास मैक्रो max परिभाषित है। यह सी लाइब्रेरी के साथ हो सकता है, क्योंकि आम तौर पर सी मानक सी मानक पुस्तकालय कार्यों को वास्तव में मैक्रोज़ होने की अनुमति देता है (हालांकि मैंने केवल एमएसवीसी पर इस तरह की दुर्घटना देखी है)।

gcc -E के साथ जांच करने के लिए, आप कर सकते हैं

  • preprocess स्रोत और इसी कोड के लिए उत्पादन खोज करते हैं। जांचें कि यह अवांछित है या नहीं।
  • #include <vector> से पहले #undef max लाइन जोड़ें और देखें कि यह मदद करता है या नहीं।
+3

धन्यवाद, #undef अधिकतम समस्या को हल किया गया है:) – user977480

+1

यह मुझे बचाया, मैं किसी और के कोड का उपयोग कर रहा था और मुझे नहीं पता था कि क्या हो रहा था। – diedthreetimes

+0

यह मेरी समस्या हल करता है। Linux g ++ में एक ही त्रुटि हो रही है। यह मैक्रो "अधिकतम" के कारण मेरे कोड में परिभाषित किया गया था। इस मैक्रो का नाम बदलने के बाद, यह त्रुटि गायब हो जाती है। – rashok

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