2017-02-28 8 views
0

C#で紹介しています。一般的なインターフェイスとクローズで扱うことができない問題があります。私を助けることができた。ジェネリックインターフェイスとクラスを使用したタイプとの競合があります。#

enum ListError 
{ 
    Ok = 0, 
    NoMemory, 
    ErrorPosition 
} 

interface IList<T> 
{ 

    int End(); 

    ListError Insert<T>(T x, int p); 

} 

class ListArrays<T>: IList<T> 
{ 
    const int MAX = 100; 

    T [] data = new T[MAX]; 
    int last = 0; 

    public int End() 
    { 
     return last+1; 
    } 

    ListError Insert<T>(T x, int p) 
    { 
     if (last >= MAX) 
      return ListError.NoMemory; 
     if (p > last || p < 0) 
      return ListError.ErrorPosition; 
     for (int q = last; q >= p; q--) 
      data[q] = data[q - 1]; 
     last++; 
     data[p] = x; 
     return ListError.Ok; 
    } 
} 

私が述べライン

data[p] = x; 

で、コンパイル時エラーと戦っている:

Cannot implicitly convert type 'T [c:\Users\MartinD_PC\Documents\VisualStudio 2013\Projects\Aho_Hopcroft_Ullman\Aho_Hopcroft_Ullman\Chapter_2\ListaArreglos.cs(9)]' to 'T' 
+0

コンパイラの警告をお読みください。問題を説明した警告を受け取ったはずです。 –

答えて

1

変更ListError Insert<T>(T x, int p)ListError Insert(T x, int p)へ。コンパイラは、に新しいタイプTを指定していると考えています。

注:Insertはパブリックである必要があります(またはインターフェイス実装であるため明示的に指定する必要があります)。それ以外の場合は、別のコンパイルエラーです。

+0

それは優秀に働いた。どうもありがとう! –

+0

満足していると答えてください。ありがとう。 –

関連する問題