【发布时间】:2019-06-20 13:02:30
【问题描述】:
我正在尝试使用 TFPGmap 创建和使用一个简单的字典:
program rnTFPGmap;
{$mode objfpc}
uses fgl;
var
mydict: specialize TFPGmap<string, string>;
key: string;
i: longint;
begin
mydict.create;
mydict.add('k1','v1');
mydict.add('k2','v2');
mydict.add('k3','v3');
//for key in mydict.keys do {does not work either;}
for i := 1 to length(mydict) do {line 17: first error from here. }
writeln(mydict[i]);
end.
但是,它给出了以下错误:
$ fpc soq_rntfpgmap
Free Pascal Compiler version 3.0.0+dfsg-11+deb9u1 [2017/06/10] for x86_64
Copyright (c) 1993-2015 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling soq_rntfpgmap.pas
soq_rntfpgmap.pas(17,16) Error: Type mismatch
soq_rntfpgmap.pas(18,19) Error: Incompatible type for arg no. 1: Got "LongInt", expected "ShortString"
soq_rntfpgmap.pas(22) Fatal: There were 2 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode
编辑:我尝试根据文档修改代码并提出以下版本:
program rnTFPGmap;
{$mode objfpc}
uses fgl;
type
tuple = specialize TFPGmap<string, string>;
mydict = Array of tuple;
var
dict: mydict;
i: tuple;
item: string;
begin
setlength(dict, length(dict)+3);
dict.add('k1','v1'); {error on this line: "CREATE" expected but "ADD" found}
dict.add('k2','v2');
dict.add('k3','v3');
writeln('dict.count: ', dict.count);
for i in dict do
writeln(i);
end.
但我现在收到以下错误:
$ fpc soq_rntfpgmap
Free Pascal Compiler version 3.0.0+dfsg-11+deb9u1 [2017/06/10] for x86_64
Copyright (c) 1993-2015 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling soq_rntfpgmap.pas
soq_rntfpgmap.pas(13,25) Warning: Variable "dict" of a managed type does not seem to be initialized
soq_rntfpgmap.pas(14,7) Fatal: Syntax error, "CREATE" expected but "ADD" found
Fatal: Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode
无法解决这个问题。
【问题讨论】:
-
为什么这里可以使用Length?你用什么作为参考?看起来你在猜测。我可以告诉你答案,但问题会不断出现,直到你开始使用适当的参考。此外,这不是您实例化对象的方式。请参阅stackoverflow.com/q/12203457/505088 此外,我们根据这种语言计数为零。
-
我试过了:
for i := 0 to mydict.count do writeln(mydict[i]);但得到了错误:Error: Incompatible type for arg no. 1: Got "LongInt", expected "ShortString" -
您缺少的关键是您正在使用的类的文档。我可以给你链接,但你自己用网络搜索找到它可能会很好。它有所有的答案。
-
这不是德尔福问题。
标签: dictionary hashmap freepascal