試圖建立一個接口和泛型基於圖形和得到一個奇怪的錯誤 - 注意在錯誤行字「整數」的情況不同。DCC錯誤...:E2010不兼容的類型:「整」和「整數」
將文本解析器傳遞給Graph實現,然後由Graph調用以構建其基礎數據結構。更多的IGraphConstructor對象可以構建更復雜的實際圖形,而不僅僅填充基本字典。
IGraphConstructor<K,V> = interface
function Construct(AData : TObjectDictionary<K,V>) : boolean;
end;
IGraph<K,V> = interface
['{B25EEE1F-3C85-43BB-A56B-3E14F7EA926C}']
function Construct(AConstructor : IGraphConstructor<K,V>) : boolean;
function GetNodes : TObjectDictionary<K,V>;
property Nodes : TObjectDictionary<K,V> read GetNodes;
end;
TGraph<K,V> = class(TComponent, IGraph<K,V>)
private
FData : TObjectDictionary<K,V>;
function GetNodes : TObjectDictionary<K,V>;
...
//the editor
TVirtualEditor = class(TComponent)
private
FGlyphs : TGraph<integer,TGlyph>;
...
TTextParser<integer,TGlyph> = class(TInterfacedObject, IGraphConstructor<integer,TGlyph>)
...
和...
function TVirtualEditor.Edit(AText: string): boolean;
var
parser : TTextParser<integer,TGlyph>;
begin
parser := TTextParser<integer,TGlyph>.Create(AText);
result := FGlyphs.Construct(parser);
end;
function TTextParser<integer,TGlyph>.Construct(AData: TObjectDictionary<integer,TGlyph>): boolean;
var
i : integer;
begin
for i := 1 to length(FText) do
begin
//#1
AData.AddOrSetValue(i, TGlyph(TCharGlyph.Create(FText[i]))); //!--> error [DCC Error] ...: E2010 Incompatible types: 'integer' and 'Integer'
end;
//uc....
end;
聲明TTextParser爲TTextParser<K,V>
,並用它作爲
TParser : TTextParser<integer,TGlyph>;
回報,誤差在#1的
[DCC Error] ...: E2010 Incompatible types: 'K' and 'Integer'
編輯:解決方法
找到一個解決方法,但不知道這是做它的方式。
function TTextParser<K,V>.Construct(AData: TObjectDictionary<K,V>): boolean;
var
i : integer;
n : K;
o : V;
begin
for i := 1 to length(FText) do
begin
n := K((@i)^);
o := V(TCharGlyph.Create(FText[i]));
AData.AddOrSetValue(n, o);
end;
result := true;
end;
正確 - 我改變,因爲該方法 – MX4399