"Does not contain a constructor that takes 0 arguments",以及如何从另一个 class 访问受保护的值
"Does not contain a constructor that takes 0 arguments", and how to access protected values from another class
我有两个问题。一个是 Box
继承了 Rectangle
的值,但我得到了错误 "Does not contain a constructor that takes 0 arguments"。这是什么意思?
class Box : Rectangle
{
private double height;
private double Height
{
get { return height; }
set { if (value > 0) height = value; }
}
//Error for box: Does not contain a constructor that takes 0 arguments
public Box (double l, double w, double h)
{
length = l;
width = w;
height = h;
}
public double findArea(double h)
{
return h * h;
}
public double findVolume(double l, double w, double h)
{
return l * w * h;
}
public String toString()
{
return ("The volume is " + " cm");
}
}
另一个问题,我无法从 Rectangle
class 访问 protected
值,我也不确定该怎么做,因为我阅读并尝试了其他网站的方法但是我不是很懂。
Does not contain a constructor that takes 0 arguments
发生这种情况是因为您的基础 class Rectangle
实际上不包含这样的构造函数,但您没有指定要调用的其他构造函数。当你的 class 的构造函数没有指定要调用的基 class 构造函数时,无参数构造函数是默认的,但是由于基 class 中不存在一个,你会得到一个编译时错误。
从您发布的代码推断 Rectangle
的声明是什么,我猜您希望 Box
构造函数看起来像这样:
public Box (double l, double w, double h)
: base(l, w)
{
height = h;
}
至于无法访问protected
会员,那是根本不可能的。派生 class 始终可以访问具有 protected
可访问性的任何基础 class 成员。如果您在这样做时遇到问题,那么您还有其他地方做错了。
但是如果没有关于问题的具体信息,就不可能说出那是什么。您需要提供您收到的 确切 错误消息,以及可靠地重现该问题的 a good, minimal, complete code example。
我有两个问题。一个是 Box
继承了 Rectangle
的值,但我得到了错误 "Does not contain a constructor that takes 0 arguments"。这是什么意思?
class Box : Rectangle
{
private double height;
private double Height
{
get { return height; }
set { if (value > 0) height = value; }
}
//Error for box: Does not contain a constructor that takes 0 arguments
public Box (double l, double w, double h)
{
length = l;
width = w;
height = h;
}
public double findArea(double h)
{
return h * h;
}
public double findVolume(double l, double w, double h)
{
return l * w * h;
}
public String toString()
{
return ("The volume is " + " cm");
}
}
另一个问题,我无法从 Rectangle
class 访问 protected
值,我也不确定该怎么做,因为我阅读并尝试了其他网站的方法但是我不是很懂。
Does not contain a constructor that takes 0 arguments
发生这种情况是因为您的基础 class Rectangle
实际上不包含这样的构造函数,但您没有指定要调用的其他构造函数。当你的 class 的构造函数没有指定要调用的基 class 构造函数时,无参数构造函数是默认的,但是由于基 class 中不存在一个,你会得到一个编译时错误。
从您发布的代码推断 Rectangle
的声明是什么,我猜您希望 Box
构造函数看起来像这样:
public Box (double l, double w, double h)
: base(l, w)
{
height = h;
}
至于无法访问protected
会员,那是根本不可能的。派生 class 始终可以访问具有 protected
可访问性的任何基础 class 成员。如果您在这样做时遇到问题,那么您还有其他地方做错了。
但是如果没有关于问题的具体信息,就不可能说出那是什么。您需要提供您收到的 确切 错误消息,以及可靠地重现该问题的 a good, minimal, complete code example。