ओवरलोडिंग ऑपरेटर नहीं
अच्छा दिन, मैं अपने खाली समय में कुछ कोडफोर्स अभ्यास कर रहा हूं, और मुझे यह जांचने की समस्या थी कि क्या उपयोगकर्ता लड़का था या लड़की, ठीक है, मेरी समस्या यह नहीं है, मैंने अभी कोड का प्रदर्शन किया है। अपने कंप्यूटर में अपना कोड संकलित करते समय (मैं 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;
हर कोई जो मदद करता है के लिए धन्यवाद।
जवाब
किसी फ़ंक्शन के अंदर, फ़ंक्शन का नाम एक स्पष्ट स्थानीय चर का उपयोग करने के विकल्प के रूप में इस्तेमाल किया जा सकता है या 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;