2010-11-11 12 views
5

से पहले अपेक्षित प्राथमिक अभिव्यक्ति क्या आप समझा सकते हैं कि शीर्षक त्रुटि का क्या अर्थ है?त्रुटि: एक्स टोकन

मुझे इसे कभी-कभी मिलता है और मैं हमेशा अंततः दुर्घटना से इसे ठीक करने का प्रबंधन करता हूं, लेकिन मेरे पास अभी भी इसका कोई मतलब नहीं है।

यहाँ मेरी वर्तमान त्रुटि से एक उदाहरण है:

Lca<RankVec, VertexVec> lca(graphList[0], dset, ss&); 

error: expected primary-expression before ')' token

+0

उदाहरण के बारे में कैसे? – TonyK

+0

क्या यह एक फ़ंक्शन घोषणा या फ़ंक्शन कॉल होना चाहिए? – MSalters

+0

@MSalters फ़ंक्शन कॉल –

उत्तर

2

& प्रतीक थोड़ा सा और ऑपरेटर के रूप में उपयोग किया जाता है। अर्थात। 0x3 & 0x5 == 0x1। इस रूप में, यह दो अभिव्यक्तियों के बीच एक इंफिक्स ऑपरेटर है। आपने जो बताया है उससे, अब हम जानते हैं कि ss एक अभिव्यक्ति है। इसलिए, संकलक सोचता है कि ss & थोड़ा सा और अभिव्यक्ति की शुरुआत है, और यह दाएं हाथ की ओर से अपेक्षा करता है (जिसे इसे "प्राथमिक अभिव्यक्ति" कहा जाता है)। हालांकि, दाएं हाथ की तरफ, कंपाइलर ) से मुकाबला करता है। यह स्पष्ट रूप से एक और अभिव्यक्ति के दाएं हाथ नहीं है।

3

हार्ड किसी भी नमूने के बिना बताने के लिए, लेकिन IIRC यह एक अपरिभाषित प्रतीक का उपयोग करने का एक परिणाम के रूप होता है (उदाहरण के लिए एक समारोह या एक के बिना एक प्रकार घोषणा - सुनिश्चित नहीं है कि वास्तव में कौन सा है)। नतीजतन, पार्सर भ्रमित हो जाता है और यह नहीं जानता कि कोड में आगे क्या उम्मीद करनी है।

- (मैं यह त्रुटि केवल अन्य त्रुटियों के साथ संयोजन के रूप में प्रकट होता है विश्वास है या आपको एक कोड स्निपेट जो जीसीसी संकलक पर केवल इस त्रुटि देना होगा प्रदान कर सकते हैं?) -

संपादित करें: कोड में आपके द्वारा दी गई , यह अवैध जगह पर "" प्रतीक का सामना करने के बाद ही पार्सर खो गया है - इसलिए अमान्य वाक्यविन्यास का परिणाम, अमान्य अर्थशास्त्र नहीं।

ऐसे क्रिप्टिक त्रुटि संदेश (या अक्सर बदतर) इस तथ्य का परिणाम हैं कि सी ++ का व्याकरण अनावश्यक है और संकलक, त्रुटि को देखते हुए, वास्तव में अनुमान लगाया नहीं जा सकता कि वहां क्या होना चाहिए था और इस प्रकार एक और सटीक वर्णन नहीं उत्पन्न कर सकता ।

0

इस समय ओपी में जानकारी के साथ सुझाव देने के लिए मुश्किल है, लेकिन मुझे इसे आज़माएं।

मान लीजिए कि ओपी में एक अभिव्यक्ति कॉल होने के लिए अभिव्यक्ति के लिए हर चीज जगह पर है, तो अंतिम तर्क को पार करने के तरीके को बदलने का प्रयास करें। यदि आप इसे पॉइंटर के रूप में पास करना चाहते हैं, तो आपको नाम से पहले & का उपयोग करना होगा और बाद में नहीं।

Lca<RankVec, VertexVec> lca(graphList[0], dset, &ss); 
2
स्टैंडर्ड डॉक्स से

।, 5.1 प्राथमिक भाव,

Primary expressions are literals, names, and names qualified by the scope resolution operator ::.

और 2.6 भी से टोकन,

There are five kinds of tokens: identifiers, keywords, literals,16) operators, and other separators

अब, मेरा मानना ​​है कि त्रुटि सुंदर वर्णनात्मक है।

हो पे जो मदद करता है ..

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