2017-04-11 3 views
-1

派生クラスを作成しようとしていますが、各コンストラクターでこの構文エラーが発生しています。コントラクター定義:受け取った "引数なし"

これは、私にはどんな意味がありません「parent.parentは(親)」が必要な正式な パラメータ「P」に対応して与えられた引数はありません。これは、コールではない何かの前にこれを見たことがないメソッド呼び出しではなく、コンストラクタの定義です。

namespace ConsoleApp1 
{ 

     public class Parent 
     { 
      public string Label; 

      public Parent(Parent p) 
      { 
       Label = p.Label; 
      } 
     } 

     public class Child : Parent 
     { 
      public string Label2; 

      public Child(Parent p) 
      { 
       Label = p.Label; 
      } 

      public Child(Child c) 
      { 
       Label = c.Label; 
       Label2 = c.Label2; 
      } 

      public Child(string blah, string blah2) 
      { 
       Label = blah; 
      } 
     } 
    class Program 
    { 
     static void Main(string[] args) 
     { 

     } 
    } 
} 
+0

将来的には問題を '[mcve']に減らすことができます - この場合、パラメータ化されたコンストラクタを持つ基本クラス(理想的には' string'のような共通型) 1つのコンストラクタを持つ派生クラスです。エラーメッセージをイメージではなくテキストとして表示します... –

+0

エラーメッセージをテキストとして表示しました..... – TheColonel26

+0

イメージとして表示する必要はありません。画像には、実際には、赤い波打ちを持つクラス名であることを示す以外に何も追加されません。 –

答えて

6

この:

public LabelImage(LabelImage source) 
{ 
    Label = source.Label; 
    image = new MagickImage(source.image); 
    fileinfo = source.fileinfo; 
} 

が暗黙のうちにこのです:

public LabelImage(LabelImage source) : base() 
{ 
    Label = source.Label; 
    image = new MagickImage(source.image); 
    fileinfo = source.fileinfo; 
} 

base()一部、MyImageAndStuffパラメータなしのコンストラクタ、またはのみparams配列パラメータを持っているいずれかを呼び出そう、またはオプションのパラメータのみを持つものです。そのようなコンストラクタは存在しないため、エラーが発生します。

あなたはおそらくしたい:

public LabelImage(LabelImage source) : base(source) 
{ 
    Label = source.Label; 
    image = new MagickImage(source.image); 
    fileinfo = source.fileinfo; 
} 

...とすべての他のコンストラクタについても同様の事。どちらか、またはパラメータのないコンストラクタをMyImageAndStuffに追加する必要があります。すでにのMyImageAndStuffインスタンスを作成することはできません。sourceはヌルになる可能性がありますが、のインスタンスはMyImageAndStuffです。

+0

@Nabrenは、基本クラスに既定のコンストラクターが定義されていなかったため正しいものでした。あなたは答えを得るので、より詳細な答えを出しました。 – TheColonel26

1

MyImageAndStuffには、パラメータのないコンストラクタ、または引数を渡さずに解決できるコンストラクタがないため、LabelImage内のすべての派生コンストラクタのMyImageAndStuffからコンストラクタを明示的に呼び出す必要があります。例:

public LabelImage(LabelImage source) 
    : base(source) 
+1

"デフォルトコンストラクタ"という用語は、コンパイラが提供するコンストラクタを記述するときに、C#仕様で通常使用されることに注意してください。この場合、 "パラメータなしのコンストラクタ"を意味しますが、 'params'配列のパラメータだけを持つコンストラクタやオプションのパラメータだけでも問題ありません。 –

+0

@Jon Skeet、ありがとうございました。 – Nabren

+0

これはまだ正しくありません。ただ 'MyImageAndStuff(MyImageAndStuff source = null) 'があれば、パラメータのないコンストラクタはなくてもコンパイルできます。一方、あなたの答えは基本的に私のサブセットになる固定する... –

関連する問題