2017-10-31 9 views
0

Goboコンパイラとそのツールを使用してプロジェクトをコンパイルしようとしています(this SO question参照)、標準ライブラリequal(..)を参照するエラーメッセージが表示されます。私は間違いが私が持っている標準ライブラリではないコードのどこかにあると確信していますが、私はgeantからいくつかの情報を取得する方法を知らない。私はコードからどのクラス、関数、コード行を呼び出すかもしれないequal(..)または他の標準ライブラリ関数を呼び出すことを知っていると思います。そして、はい、私はすでにequal(..)すべてを私のコードで調べてみました。私が手geantからスタックトレースを取得する

エラーメッセージは、このようなものです:

[野次る]はクラスSQL_GENERATOR_TSQL65(ANY、95,8):実引数#1のタイプ 'STRING_8は' 正式の 'UC_STRING' をタイプに準拠しませんlibrary\free_elks\src\elks\kernel\any.eの機能で、引数「クラスで '`is_equal UC_STRING'

このポイント:

frozen equal (a: detachable ANY; b: like a): BOOLEAN 
     -- Are `a' and `b' either both void or attached 
     -- to objects considered equal? 
    do 
     if a = Void then 
      Result := b = Void 
     else 
      Result := b /= Void and then 
         a.is_equal (b) -- <<<<<<< THIS LINE 
     end 
    ensure 
     definition: Result = (a = Void and b = Void) or else 
        ((a /= Void and b /= Void) and then 
        a.is_equal (b)) 
    end 

答えて

1

報告CAT-呼び出しはシステムエラーです(クラスエラーとは対照的に)、すなわちシステム全体の分析の結果として現れる。 UC_STRINGクラスは、is_equalフィーチャを再定義します。その結果、タイプUC_STRING(またはその子孫)の引数でのみ使用できます。

いくつかのコード(STRING_8からUC_STRING継承)UC_STRINGSTRING_8として扱い。 UC_STRINGがタイプSTRING_8のエンティティに接続されるとすぐに、コードはCATコールを受け取る危険性があります。次に例を示します。

s: STRING_8 
t: STRING_8 
u: UC_STRING 
... 
s := u 
if equal (s, t) then ... 

あなたがUC_STRINGのインスタンスで呼び出しis_equalに言及したが、引数としてSTRING_8を受けequalのコードが。ただし、is_equalのバージョンはUC_STRINGで、STRING_8ではなく、UC_STRINGのみを引数として扱うことができます。だからこそあなたは誤りを得る。

問題がSTRING_8

  • STRING_8
  • CAT-コールエラー
  • 無効に UC_STRINGのすべての再付着を取り除く受け入れるように UC_STRINGis_equalの引数の型を変更

    • によって解決することができます

      あなたの場合、最後の1つが最善のようです。

    関連する問題