不重载运算符
Not overloading operator
你好,我在空闲时间做一些 Codeforces 练习,我在测试用户是男孩还是女孩时遇到了问题,好吧,我的问题不在于此,我刚刚演示了代码。
在我的计算机中编译我的代码时(我使用的是 i386 版本 3.0.4)我没有收到任何错误,但是 codeforces 给我这个错误
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()
在赋值的 right-hand 侧使用函数名称作为操作数。 freq := freq + 1;
应该 是现代 Pascal 编译器中的合法声明,请参阅 。
但是,错误消息似乎表明失败的编译器正在将语句 freg + 1
中的 freq
视为函数类型而不是局部变量。这可以解释为什么它抱怨无法添加具有函数类型的 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;
你好,我在空闲时间做一些 Codeforces 练习,我在测试用户是男孩还是女孩时遇到了问题,好吧,我的问题不在于此,我刚刚演示了代码。 在我的计算机中编译我的代码时(我使用的是 i386 版本 3.0.4)我没有收到任何错误,但是 codeforces 给我这个错误
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()
在赋值的 right-hand 侧使用函数名称作为操作数。 freq := freq + 1;
应该 是现代 Pascal 编译器中的合法声明,请参阅
但是,错误消息似乎表明失败的编译器正在将语句 freg + 1
中的 freq
视为函数类型而不是局部变量。这可以解释为什么它抱怨无法添加具有函数类型的 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;