2012-03-07 143 views
0

我正在制作一个包含场地,事件和运动员的运动日历。构造函数0参数错误

基本上,当我尝试运行该程序,我得到的错误“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构造

基本上如何建立一个新的构造或改变第一提取

在此先感谢

丹尼尔

+0

不知道为什么这是downvoted ....... – 2012-03-07 17:51:02

+2

我不想被拖到这里,但你可能花了更多的时间打字这个职位,比寻找错误的来源...编辑:J_mcnally downvote因为这个问题是没有意义的 – squelos 2012-03-07 17:51:22

+2

错误是由使用不存在的构造函数造成的。在类中定义任何构造函数时,默认的构造函数会消失。 Venue只有一个构造函数,它有两个参数。正如答案所提到的,代码可能在语义上是错误的。 – harold 2012-03-07 17:52:27

回答

5

从你的代码,它看起来像你想添加vm_Venue所以你只要说

public void addVenue(Venue v) { 
    m_Venue.Add(v); 
} 

您要添加的实例作为参数v传入的Venue,而不是一个新实例,如果无参数构造函数存在,将创建new Venue()

5

我想你addVenue方法不正确

public void addVenue(Venue v) 
{ 
    // add the provided instance, not a NEW one 
    m_Venue.Add(v); 
} 
+0

感谢它现在所有的作品 – user1255338 2012-03-07 17:58:29

0

m_Venue.Add(新馆( “金刚”, “伦敦”));

如果加入场馆方法已经发生在一个地点,然后就去做m_Venue.Add(V)

0
m_Venue.Add(v); would get rid of that error 

在C#中的所有类有一个默认的构造与一个0参数,直到你定义构造函数。 一旦你明确定义了一个构造函数,你还需要添加一个带有0个参数的构造函数(如果这是你需要的)

0

这里有两个小概念错误。

第一个问题是您正在创建一个没有参数的新场地 - >.Add(new Venue())Venue的构造函数需要两个字符串。这是您的编译错误的来源。例如,.Add(new Venue("foo", "bar"));会编译。

的第二个问题是,你传递一个VenueaddVenue方法,但不能将其添加到列表中。你可能意思是m_Venue.Add(v);,这可能是你应该做的。

1

在C#中,除非您明确地创建构造函数,否则所有非静态类都有一个隐式默认,无参数(无参数)构造函数。定义任何构造函数的行为意味着不再存在隐式构造函数。在这种情况下,你的类有一个带有两个参数的构造函数,因此,你没有隐式的构造函数。你的编译器捕获它。您需要a)添加无参数构造函数或b)更改实例化(新Venue ..)以使用现有构造函数。

只要注意你的构造函数为什么首先使用这些参数。你的Venue可以在没有名字或地址的情况下“工作”吗?而且,还有另一种提供姓名或地址的方式(例如,使用公共财产设置者)。如果是这样,你可以认为这些是可选的。在那种情况下,你现有的构造函数是为了方便,你可以安全地添加一个无参数的构造函数。如果您绝对需要Venue名称/地址,并且没有办法在不破坏封装的情况下设置它们,那么您应该更改实例化逻辑以提供参数。

好的经验法则是,对象的创建者通过构造函数为对象提供必需的组件/服务/依赖关系。施工后可以提供可选的组件/服务/依赖关系。