E2008 互換性のない型です (Delphi)

提供: RAD Studio
移動先: 案内検索

エラーと警告のメッセージ(Delphi) への移動

このエラーメッセージは,コンパイラは 2 つの型が互換(非常に近い型)であることを想定しているのに,実際には異なる型であったときに表示されます。このエラーはさまざまな場合に発生します。たとえば,プロパティ内の read 節か write 節で指定したメソッドのパラメータリストがそのプロパティに適合しない場合や,標準手続きまたは標準関数へのパラメータの型が誤っている場合などです。

このエラーは,2 つのユニットで同じ名前の型が宣言されている場合にも発生します。たとえば,インポートされたユニット内の手続きのパラメータの型の名前が,インポート先で宣言されている型の名前と同じで,同じ名前の型の変数がその手続きに渡された場合にも,このエラーが発生します。


unit unit1;
interface
  type
    ExportedType = (alpha, beta, gamma);

implementation
begin
end.

unit unit2;
interface
  type
    ExportedType = (alpha, beta, gamma);

  procedure ExportedProcedure(v : ExportedType);

implementation
  procedure ExportedProcedure(v : ExportedType);
  begin
  end;

begin
end.

program Produce;
uses unit1, unit2;

var
  A: array [0..9] of char;
  I: Integer;
  V : ExportedType;
begin
  ExportedProcedure(v);
  I:= Hi(A);
end.

{ 標準関数 Hi には整数型またはワード型の引数が必要だが,ここでは配列型の引数を指定している。ExportedProcedure の呼び出しの場合では,unit1 が unit2 より後にインポートされているので,V の型は実際には unit1.ExportedType となり,エラーが発生する }


unit unit1;
interface
  type
    ExportedType = (alpha, beta, gamma);

implementation
begin
end.

unit unit2;
interface
  type
    ExportedType = (alpha, beta, gamma);

  procedure ExportedProcedure(v : ExportedType);

implementation
  procedure ExportedProcedure(v : ExportedType);
  begin
  end;

begin
end.

program Solve;
uses unit1, unit2;
var
  A: array [0..9] of char;
  I: Integer;
  V : unit2.ExportedType;
begin
  ExportedProcedure(v);
  I:= High(A);
end.

{ ほんとうは Hi でなく標準関数 High を使用するつもりだった。ExportedProcedure の呼び出しについては 2 とおりの解決方法がある。1 つは uses 節の順序を入れ替えることだが,それでも同様のエラーが発生する可能性がある。より確実な解決策は,下の例の V のように,型名が宣言されたユニット名を使って問題の型を完全に修飾すること }