ओवरलोडिंग ऑपरेटर नहीं

Sep 10 2020

अच्छा दिन, मैं अपने खाली समय में कुछ कोडफोर्स अभ्यास कर रहा हूं, और मुझे यह जांचने की समस्या थी कि क्या उपयोगकर्ता लड़का था या लड़की, ठीक है, मेरी समस्या यह नहीं है, मैंने अभी कोड का प्रदर्शन किया है। अपने कंप्यूटर में अपना कोड संकलित करते समय (मैं i386 के लिए 3.0.4 संस्करण का उपयोग कर रहा हूं) मुझे कोई त्रुटि नहीं मिलती है, लेकिन कोडफोर्स मुझे यह त्रुटि देता है

program.pas(15,16) Error: Operator is not overloaded: "freq(Char;AnsiString):LongInt;" + "ShortInt"
program.pas(46,4) Fatal: There were 1 errors compiling module, stopping 

त्रुटि मेरे लिए पर्याप्त नहीं थी, क्योंकि एक ही स्क्रिप्ट पूरी तरह से मेरे संस्करण के साथ संकलित थी। प्लेटफ़ॉर्म उपयोग कर रहा है (संस्करण 3.0.2 i386-Win32)।

program A236;
uses wincrt, sysutils;

var
    username : String;


function freq(char: char; username : String): Integer;
var 
   i: Integer;
begin
    freq:= 0;
    for i:= 1 to length(username) do
        if char = username[i] then
            freq:= freq + 1;
            //writeln(freq);        
end; 

function OddUserName(username : String): Boolean;
var
    i, counter: Integer;

begin
    OddUserName:= false; // even
    counter:= 0;
    for i:= 1 to length(username) do 
        if freq(username[i], username) <> 1 then    
            delete(username, i, 1)
        else
            counter:= counter + 1;  
    if counter mod 2 <> 0 then
        OddUserName:= true; // odd
    //writeln(counter); 
    //writeln(OddUserName);                 
end;        

begin
    readln(username);
    if not OddUserName(username) then 
        writeln('CHAT WITH HER!')
    else 
        writeln('IGNORE HIM!'); 


    //readkey();    
end.

इस पंक्ति में त्रुटि संभवतः मानी जाती है:

function freq(character: char; username : String): Integer;

हर कोई जो मदद करता है के लिए धन्यवाद।

जवाब

1 RemyLebeau Sep 10 2020 at 15:26

किसी फ़ंक्शन के अंदर, फ़ंक्शन का नाम एक स्पष्ट स्थानीय चर का उपयोग करने के विकल्प के रूप में इस्तेमाल किया जा सकता है या Result। freq()और OddUserName()दोनों ऐसा कर रहे हैं, लेकिन केवल freq()एक असाइनमेंट के दाईं ओर एक ऑपरेंड के रूप में फ़ंक्शन नाम का उपयोग कर रहा है । आधुनिक पास्कल संकलक में एक कानूनी वक्तव्य freq := freq + 1; होना चाहिए , देखें कि मैं पास्कल में फ़ंक्शन नाम का उपयोग परिभाषा के बिना चर नाम के रूप में क्यों कर सकता हूं? ।

हालाँकि, ऐसा लगता है कि त्रुटि संदेश यह सुझाव दे रहा है कि असफल संकलक freqकथन freg + 1को फ़ंक्शन प्रकार के रूप में मान रहा है, स्थानीय चर के रूप में नहीं। यह समझाता है कि यह ShortIntफ़ंक्शन प्रकार के साथ जोड़ने में सक्षम नहीं होने के बारे में क्यों शिकायत कर रहा है ।

तो, आपको इसके बजाय एक स्पष्ट स्थानीय चर का उपयोग करना होगा, (या विशेष Resultचर, यदि आपका संकलक वह प्रदान करता है), उदाहरण के लिए:

function freq(charToFind: char; username : String): Integer;
var 
  i, f: Integer;
begin
  f := 0;
  for i := 1 to Length(username) do
    if charToFind = username[i] then
      f := f + 1;
      //writeln(f);
  freq := f;
end; 
function freq(charToFind: char; username : String): Integer;
var 
  i: Integer;
begin
  Result := 0;
  for i := 1 to Length(username) do
    if charToFind = username[i] then
      Result := Result + 1;
      //writeln(f);
end;