我正在制作一个运动日历,上面有场地、赛事和运动员。
基本上,当我尝试运行该程序时,我得到的错误是"Sport2012.Venue不包含一个接受0个参数的构造函数。
//Method to add a new Venue to program
public void addVenue(Venue v)
{
m_Venue.Add(new Venue());
}上面的代码在新的地点(m_Venue.Add())出现错误;
public String m_venueName;
public String m_venueAddress;
private List<Event> m_Events;
public Venue(String venueName, String venueAddress)
{
m_venueName = venueName;
m_venueAddress = venueAddress;
m_Events = new List<Event>();
}上面的代码显示了Sport2012.Venue的构造函数。
基本上,我是创建一个新的构造函数还是修改第一个提取
提前感谢
丹尼尔
发布于 2012-03-08 01:48:53
从您的代码看,您似乎正在尝试将v添加到m_Venue中,因此您应该这样说
public void addVenue(Venue v) {
m_Venue.Add(v);
}您希望添加作为参数v传入的Venue实例,而不是添加一个新实例,如果存在无参数构造函数,则new Venue()将创建一个新实例。
发布于 2012-03-08 01:49:13
我认为您的addVenue方法不正确
public void addVenue(Venue v)
{
// add the provided instance, not a NEW one
m_Venue.Add(v);
}发布于 2012-03-08 02:07:25
在C#中,除非显式创建构造函数,否则所有非静态类都有一个隐式的缺省、无参数(无参数)构造函数。定义任何构造函数的行为意味着不再有隐式构造函数。在这种情况下,您的类有一个接受两个参数的构造函数,因此,您没有隐式构造函数。你的编译器捕捉到了它。您需要a)添加一个无参数的构造函数,或者b)更改您的实例化(新地点..)使用现有的构造函数。
只要知道为什么你的构造函数首先接受这些参数就行了。你的场所对象可以在没有名字或地址的情况下“工作”吗?还有,是否有另一种方式来提供名称或地址(例如,使用公共属性设置器)。如果是这样的话,你可以认为这些是可选的。在这种情况下,您现有的构造函数是为了方便,您可以安全地添加一个无参数的构造函数。如果您绝对需要场所名称/地址,并且无法在不破坏封装的情况下设置它们,那么您应该更改实例化逻辑以提供参数。
一个好的经验法则是,对象的创建者通过构造函数为对象提供其基本的组件/服务/依赖项。可以在构造后提供可选的组件/服务/依赖项。
https://stackoverflow.com/questions/9606557
复制相似问题