2013-06-05 6 views
8

मैं TDRecLst और TDSplyCm कोड से इकाइयों The Tomes of Delphi के साथ शामिल उपयोग करने के लिए कोशिश कर रहा हूँ, लेकिन मैं TDBasics.pas में एक संकलक त्रुटि मिलती है:"डेल्फी के टॉमस" संकलन से कोड क्यों नहीं है?

Identifier expected but 'CONST' found

मैं एक ऐसी ही मिलता है में त्रुटि TDStrRes.inc:

Same error as above

क्या गलत है, और मैं इसे कैसे ठीक करूं?

The code लेखक से उपलब्ध है।

+1

मुझे लगता है कि सवाल बहुत अच्छा है। पोस्टर "प्रोग्राम को संकलित नहीं कर सकता है और समझ में नहीं आता क्यों"। आपको और क्या चाहिए? कोई भी अतिरिक्त जानकारी संभावित प्रतिक्रियाओं को पूर्वाग्रह दे सकती है। वैसे भी, 1 के खिलाफ 10 यह एक खोज पथ/इकाई मुद्दा नहीं मिला है। उदाहरण के लिए, TDRecList.pas संकलित करने के लिए, फ़ाइलें TDBasics.pas और TDDefine.inc को खोज पथ में मौजूद होना आवश्यक है। – Igor

+0

इगोर, धन्यवाद! मुझे भी समझ में नहीं आता है ... इकाई है (मेरी पोस्ट पर लिंक देखें)। मैं कार्यक्रम में इकाई जोड़ता हूं। यह स्पष्ट है? मैं कोड संकलित नहीं कर सकता। त्रुटियां: http://i.stack.imgur.com/VIM6x.png http://i.stack.imgur.com/7i3To।पीएनजी – tbutton

+2

@ इगोर, आप सही हैं कि अधिक जानकारी प्रतिक्रियाओं को पूर्वाग्रहित करेगी; यह उन्हें अंधेरे में सिर्फ शॉट्स के बजाय * सहायक * होने की ओर पूर्वाग्रह करेगा। इस प्रश्न में लापता जानकारी का सबसे बुनियादी टुकड़ा * त्रुटि संदेश * है। –

उत्तर

13

आप स्पष्ट रूप से डेल्फी संस्करण का उपयोग कर रहे हैं जो डेल्फी 6 से नया है। 2005 में अपडेट होने के बावजूद, उस पुस्तक का कोड केवल डेल्फी के उस संस्करण का पता लगाता है। TDDefine.inc उस संस्करण के आधार पर कई संकलक प्रतीकों को परिभाषित करता है, लेकिन जब आप जिस संस्करण का उपयोग कर रहे हैं वह कुछ भी पहचान नहीं है, तो यह नहीं प्रतीकों को परिभाषित करता है। अंत में समस्याएं तब होती हैं जब संकलक टीडीबीएसिक्स.pas में इस तरह के कोड का सामना करता है;

implementation 

uses 
    {$IFDEF Delphi1} 
    WinTypes, WinProcs; 
    {$ENDIF} 
    {$IFDEF Delphi2Plus} 
    Windows; 
    {$ENDIF} 
    {$IFDEF Kylix1Plus} 
    Types, Libc; 
    {$ENDIF} 

{$IFDEF Delphi1} 
{$R TDStrRes.r16} 
{$ENDIF} 
{$IFDEF Delphi2Plus} 
{$R TDStrRes.r32} 
{$ENDIF} 
{$IFDEF Kylix1Plus} 
{$R TDStrRes.r32} 
{$ENDIF} 

const 
    UnitName = 'TDBasics'; 

के बाद से Delphi1, Delphi2Plus, या Kylix1Plus में से कोई भी परिभाषित किया गया है, uses खंड खाली है। जब हम सब संकलक निर्देशों और निष्क्रिय कोड ब्लॉक की अनदेखी, संकलक अंततः इस तरह कोड देखता है:

implementation 

uses 

const 
    UnitName = 'TDBasics'; 

इसलिए संकलक const के बजाय एक पहचानकर्ता की उम्मीद के बारे में शिकायत।

इसे ठीक करने के लिए, आपको TDDefine.inc को डेल्फी के अपने संस्करण को पहचानने के लिए सिखाने की आवश्यकता है। आसान, हालांकि, को सभी संस्करण-पहचान कोड और हार्ड-कोड को उन सभी प्रतीकों को अनदेखा कर सकते हैं जो आपके द्वारा उपयोग किए जा रहे संस्करण पर लागू होते हैं। जब तक आप कभी भी डेल्फी 6, से अधिक पुराने संस्करण का उपयोग नहीं करते हैं, तो सभी प्रतीकों आपके सभी संस्करणों पर लागू होंगे। ताकि शेष $DEFINE निर्देश बिना शर्त कार्रवाई की जाती है

{$IFDEF VER140} 
    {$DEFINE Delphi6} 
    {$DEFINE Delphi1Plus} 
    {$DEFINE Delphi2Plus} 
    {$DEFINE Delphi3Plus} 
    {$DEFINE Delphi4Plus} 
    {$DEFINE Delphi5Plus} 
    {$DEFINE Delphi6Plus} 
    {$DEFINE HasAssert} 
{$ENDIF} 

पहली और आखिरी लाइन निकालें:

TDDefine.pas में कोड की निम्न ब्लॉक का पता लगाएं।

+0

धन्यवाद! समस्या को हल करने में जोड़ने के लिए {$ ifdef VER150} {$ परिभाषा Delphi7} {$ परिभाषा Delphi1Plus} {$ परिभाषा Delphi2Plus} {$ परिभाषा Delphi3Plus} {$ परिभाषा Delphi4Plus} {$ परिभाषा Delphi5Plus} { $ DEFINE Delphi6Plus} {$ DEFINE HasAssert} {$ ENDIF} TDDefine.inc (डेल्फी 7) – tbutton

+0

में हमें डेल्फी एक्सई या एक्सई 4 के लिए क्या जोड़ना चाहिए? – tbutton

+0

कौन परवाह करता है? शेष पुस्तक का कोड कभी भी कोई अतिरिक्त डेल्फी संस्करणों की जांच नहीं करता है, तो उन्हें पहचानने के लिए कोड और लाइनों की रेखा जोड़ने को परेशान क्यों करें? यदि आपको वास्तव में पता होना चाहिए, तो [डेल्फी संस्करणों के लिए परिभाषित की पूरी सूची] (http://stackoverflow.com/q/750801/33732) देखें, और फिर पुस्तक के प्रतीक के बजाय वहां परिभाषित प्रतीकों का उपयोग करने के लिए अपने कोड को अनुकूलित करें लेखक ने चुना। –

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