我正在制作一个有场地,活动和运动员的运动日历。
基本上当我尝试运行程序时,我得到错误“Sport2012.Venue不包含带0参数的构造函数。
//Method to add a new Venue to program
public void addVenue(Venue v)
{
m_Venue.Add(new Venue());
}
上面的代码m_Venue.Add上的错误(new Venue());
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的构造函数。
基本上我创建一个新的构造函数或改变第一个提取
提前致谢
丹尼尔
答案 0 :(得分:5)
从您的代码中,您似乎正在尝试将v
添加到m_Venue
,所以您应该说
public void addVenue(Venue v) {
m_Venue.Add(v);
}
您希望添加作为参数Venue
传入的v
实例,而不是新实例,如果存在无参数构造函数,则new Venue()
将创建该实例。< / p>
答案 1 :(得分:5)
我认为你的addVenue方法不正确
public void addVenue(Venue v)
{
// add the provided instance, not a NEW one
m_Venue.Add(v);
}
答案 2 :(得分:1)
在C#中,除非显式创建构造函数,否则所有非静态类都有一个隐式默认的无参数(无参数)构造函数。定义任何构造函数的行为意味着不再存在隐式构造函数。在这种情况下,您的类有一个带有两个参数的构造函数,因此,您没有隐式构造函数。你的编译器捕获它。您需要a)添加无参数构造函数或b)更改实例化(new Venue ..)以使用现有构造函数。
请注意为什么构造函数首先接受这些参数。您的Venue对象可以在没有姓名或地址的情况下“工作”吗?并且,是否有另一种方式来提供名称或地址(例如,使用公共财产设置者)。如果是这样,您可以将其视为可选项。在这种情况下,您现有的构造函数是为了方便,您可以安全地添加无参数构造函数。如果您绝对需要Venue名称/地址,并且无法在不破坏封装的情况下设置它们,那么您应该更改实例化逻辑以提供参数。
良好的经验法则是对象的创建者通过构造函数向对象提供其基本组件/服务/依赖项。构建后可以提供可选的组件/服务/依赖项。
答案 3 :(得分:0)
m_Venue.Add(新地点(“领主”,“伦敦”));
如果添加场地方法已经占用场地,那么只需要做m_Venue.Add(v)
答案 4 :(得分:0)
m_Venue.Add(v); would get rid of that error
在定义构造函数之前,C#中的所有类都有一个默认构造函数,其中包含0个参数。 一旦明确定义了构造函数,您还需要添加一个带有0个参数的参数(如果这是您需要的)
答案 5 :(得分:0)
这里有两个小概念错误。
第一个问题是你正在创建一个没有参数的新场地 - &gt; .Add(new Venue())
。 Venue
的构造函数有两个字符串。这是编译错误的来源。例如,.Add(new Venue("foo", "bar"));
会编译。
第二个问题是您将Venue
传递给addVenue
方法,但未将其添加到列表中。你可能意味着m_Venue.Add(v);
,这可能是你应该做的。