Code Fix

初級

No overload for method の原因と直し方

メソッドの引数の数や型が定義と一致しないときに出ます。オーバーロード解決の仕組みを理解する入り口になります。

エラーメッセージの読み方

Program.cs(4,34): error CS1501: No overload for method 'Add' takes 3 arguments
Program.cs
ファイル名
4
行番号
34
列番号 — この位置でコンパイラが解析に失敗しました
CS1501
エラーコード — 検索するとMicrosoftの解説ページが見つかります
No overload for method 'Add' takes 3 arguments
内容 — 期待していたもの、または受け付けられなかったもの

このエラーが出る典型パターン

パターン1

 1  class Program {
 2      static int Add(int a, int b) { return a + b; }
 3      static void Main(string[] args) {
 4          System.Console.WriteLine(Add(1, 2, 3   ));
                                                ^
 5      }
 6  }
Program.cs(4,34): error CS1501: No overload for method 'Add' takes 3 arguments

Addは引数を2つしか受け取りません。定義と異なる個数で呼び出すとオーバーロードが見つかりません。

直し方: , 3(空) にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  class Program {
 2      static int Triple(int a, int b, int c) { return a + b + c; }
 3      static void Main(string[] args) {
 4          System.Console.WriteLine(Triple(1, 2      ));
                                                   ^
 5      }
 6  }
Program.cs(4,34): error CS7036: There is no argument given that corresponds to the required parameter 'c' of 'Program.Triple(int, int, int)'

Tripleは3つの引数が必須です。1つ足りないとその個数向けのオーバーロードがないと判断されます。

直し方: (空), 3 にします。

この問題を解いてみる →

パターン3

 1  class Program {
 2      static double Half(double n) { return n / 2; }
 3      static void Main(string[] args) {
 4          System.Console.WriteLine(Half(4, 2  ));
                                             ^
 5      }
 6  }
Program.cs(4,34): error CS1501: No overload for method 'Half' takes 2 arguments

Halfは引数を1つしか取りません。余分な引数を渡すと一致するオーバーロードがなくなります。

直し方: , 2(空) にします。

この問題を解いてみる →

よくある誤解

引数の数が定義と1つでも違うと、コンパイラは「一致するオーバーロードがない」と判断します。デフォルト引数がない限り省略はできません。

まとめ

No overload for methodは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)