为什么我的构造函数层次结构中出现 C7036 错误?

问题描述 投票:0回答:1

我和一个小组正在 C# 中在我们教授的帮助下开发一个小游戏,但是在尝试创建一个构造层次结构时,我们遇到了一个奇怪的错误,但我们似乎找不到原因。 Player 类的相关部分(错误所在)和 Player 继承的 Character 类都如下。

玩家等级:

public class Player : Character 
    {
        public int LVL {get; private set;}  // Player level
        public int XP {get; private set;}  // Experience points
        public int MXP {get; private set;} // Max Exp
        public int COIN {get; private set;} // Player Coins 
        private Room _currentRoom = null;
        public Room CurrentRoom { get { return _currentRoom; } set { _currentRoom = value; } }

        public Player() : this(null) { }
        public Player(Room room) : this(room, null) { }
        public Player(Room room, string? name) : this(room, name, 0) { }
        public Player(Room room, string? name, int hp) : this(room, name, hp, 0) { }
        public Player(Room room, string? name, int hp, int atk) : this(room, name, hp, atk, 0){}
        public Player(Room room, string name, int hp, int atk, int def)
               ^(C7036 is thrown here. There is no argument given that corresponds to the required parameter 'name' of 'Character.Character(string, int, int, int)'CS7036)
        {
            _currentRoom = room;
            Name = name;
            HP = hp;
            ATK = atk;
            DEF = def;
            LVL = 1; // to start
            XP = 0;
            MXP = 13;
            COIN = 13;
        }

角色类别:

  public class Character : ICharacter{
        private string? _name;
        public string? Name{
            get {
               return _name; 
            }
            set{ 
                _name = value; 
            }
        }
    
        private int _hp;
        public int HP{
            get{
                return _hp;
            }
            set{
                _hp = value; 
            }
        }
        private int _atk; 
        public int ATK{
            get{
                return _atk;
            }
            set{
                _atk = value; 
            }
        }
        private int _def; 
        public int DEF{
            get{
                return _def;
            }
            set{
                _def = value; 
            }
        }

        public Character(string name, int hp, int atk, int def){
            Name = name; 
            HP = hp; 
            ATK = atk; 
            DEF = def;  
        }

我们尝试调整层次结构,使名称可为空,并尝试使用 Player 和 Character 构造函数来查看它是否能够识别“名称”。到目前为止,还没有什么能够消除这个错误。

c#
1个回答
1
投票

Player
中的构造函数相互级联,但不级联到其基类。由于
Character
没有无参数构造函数,因此创建它的实例需要提供它期望的参数。

类似于

Player
构造函数如何通过调用
this()
进行封装,最终任何构造也必须使用正确的参数调用
base()
。例如:

public Player(Room room, string name, int hp, int atk, int def)
    : base(name, hp, atk, def)
{
    _currentRoom = room;
    LVL = 1; // to start
    XP = 0;
    MXP = 13;
    COIN = 13;
}
© www.soinside.com 2019 - 2024. All rights reserved.