类不包含构造函数错误

Posted

技术标签:

【中文标题】类不包含构造函数错误【英文标题】:Class does not contain contstructor error 【发布时间】:2014-06-30 06:32:40 【问题描述】:

我对编程比较陌生,而且我刚刚开始上课。 问题是,我的编译器正在返回

“错误 1 ​​'OlioohjelmoinninPerusteet.Blogimerkinta' 不包含 带 1 个参数的构造函数”

我不知道如何解决这个问题,这是我的代码。

using System;
namespace OlioohjelmoinninPerusteet

    class Blogimerkinta
    
        string teksti;
        string[] avainsanat;

        public string Teksti  get; set; 
        public string[] Avainsanat  get; set; 
    

    class Ohjelma
    
        static void Main()
        
            string otsikko = "Otsikko";
            Blogimerkinta merkinta = new Blogimerkinta(otsikko);
            merkinta.Teksti = "Teksti";
            merkinta.Avainsanat = new string[]  "Eka", "Toka" ;
        
    

【问题讨论】:

这是日语吗?只是想知道! 天啊!!!! 9 个答案,还在数... @Rahul 不确定它是什么,但它不是日语。是的……突然提出这个问题的人数之多令人震惊。其中超过一半是 1K+ @gitsitgo 这是芬兰语。 【参考方案1】:

By default, if you do not specify a constructor it is the same as below

如果你没有为你的对象提供构造函数,C# 将创建 默认情况下实例化对象并设置成员变量的一种 到默认值表中列出的默认值(C# 参考)。

Using Constructors (C# Programming Guide)

不带参数的构造函数称为默认构造函数 构造函数。每当一个对象被调用时,就会调用默认构造函数 使用 new 操作符实例化并且不提供任何参数 到新的。

除非类是静态的,否则没有构造函数的类会被赋予一个 C# 编译器的公共默认构造函数以启用类 实例化。

class Blogimerkinta

    string teksti;
    string[] avainsanat;

    public string Teksti  get; set; 
    public string[] Avainsanat  get; set; 
    public Blogimerkinta()
    
    

您正在调用未指定的构造函数,即

    public Blogimerkinta(string TADA)
    
    

【讨论】:

【参考方案2】:

你正在新建一个对象并为构造函数传递一个参数:

Blogimerkinta merkinta = new Blogimerkinta(otsikko);

此对象没有带任何参数的构造函数,默认情况下,您可以使用所有 c# 对象获取的默认构造函数,不带参数:

Blogimerkinta merkinta = new Blogimerkinta();

或创建一个接受字符串参数的构造函数:

public Blogimerkinta(string arg) 

    //use argument for something

【讨论】:

尽管您使用了“newing up”,但您仍会获得 +1。动词怪异的语言。 只是你的标准编程术语 =) 您的解释是英文的,但示例是日文的。这是不可接受的。 :) 这些例子是芬兰语,@Rahul【参考方案3】:

你需要像这样为你的类添加一个构造函数:

class Blogimerkinta

    string teksti;
    string[] avainsanat;

    public string Teksti  get; set; 
    public string[] Avainsanat  get; set; 

    public Blogimerkinta(string otsikko)
    
        this.teksti = otsikko;
    

【讨论】:

【参考方案4】:

如果你没有定义一个默认构造函数(你没有定义),C# 会创建一个默认构造函数,并且默认构造函数没有参数并且不做任何事情。相当于这样:

public Blogimerkinta()


为了使用带有参数的构造函数(我假设在内部将对象的属性设置为该参数的值),您需要定义一个。像这样的:

public Blogimerkinta(string teksti)

    this.Teksti = teksti;

(或者设置您想要在内部设置的任何值。目前您的类只有一个 string 类型的属性,但命名使您不清楚这是否是您要设置的值。)

【讨论】:

【参考方案5】:

好吧,您正在尝试创建Blogimerkinta 的实例并将字符串参数传递给构造函数。但是,您的类上没有任何带有字符串参数的构造函数。要么创建构造函数,要么使用默认值创建实例的无参数构造函数:

Blogimerkinta merkinta = new Blogimerkinta();

【讨论】:

【参考方案6】:

您的 Blogimerkinta 没有为它定义构造函数。在编译期间,将生成一个不带参数的默认值。如果您希望您的类在实例化期间接受参数,请创建一个接受参数的构造函数。

 class Blogimerkinta
    
        public Blogimerkinta(string foo)
         //do something with foo
        
        string teksti;
        string[] avainsanat;

        public string Teksti  get; set; 
        public string[] Avainsanat  get; set; 
    

【讨论】:

【参考方案7】:

这一行用一个参数调用构造函数。

Blogimerkinta merkinta = new Blogimerkinta(otsikko);

要解决此问题,您必须创建一个。

class Blogimerkinta

    string teksti;
    string[] avainsanat;

    public Blogimerkinta() // This is parameterless constructor
    public Blogimerkinta(string input)
    
        if(input != null)
            teksti = input; //You initialize class fields here or do other stuff
    
    public string Teksti  get; set; 
    public string[] Avainsanat  get; set; 

正如您在 Main() 中看到的,您传递了一个 string 值,因此构造函数必须采用一个字符串值,以使用该值(可能更多值)初始化其字段/字段

查看msdn,因为他们解释得很好。

http://msdn.microsoft.com/en-us/library/ace5hbzh.aspx

【讨论】:

仅供参考:您不需要测试字符串 input 是否为空。 @NathanKoop 很好,因为string 是引用类型,它可以是null,因此通常没有人愿意使用null 但是您正在将一个字符串分配给一个字符串,因此使用您的代码,如果输入为空,teksti 将设置为什么? @NathanKoop 为 null,我知道,但测试您的输入是一种很好的编程习惯,因为该字符串不会在该类中的某个位置使用。 @NathanKoop 好吧不是,但由于 OP 是编程新手,他应该从一开始就学习好的做法:)【参考方案8】:

一个类有 1 个或多个构造函数。如果您不提供一个,编译器将创建一个空的: 当您说“new Blogimerkinta()”时,会调用构造函数 您正在调用一个带有参数的构造函数: new Blogimerkinta(otsikko) 但你没有定义构造函数。

你需要定义这个构造函数:

public Blogimerkinta(string s) 
    teksti = s; //I don't know which field you want to assign, just an example

(所以它看起来是一个方法,但没有返回类型,并且与类同名)

如果不定义构造函数,只能调用'new Blogimerkinta()'

【讨论】:

【参考方案9】:

这是一个通用修复:

class Blogimerkinta
    
        string teksti;
        string[] avainsanat;
        string foo="";
        public Blogimerkinta(string bar)
        
              foo=bar;
        
        public string Teksti  get; set; 
        public string[] Avainsanat  get; set; 
    

【讨论】:

由于 OP 需要提高他的 OOP 知识,您可以改进您的答案以添加对所涉及概念(构造函数)的解释,而不仅仅是提供有效的修复。

以上是关于类不包含构造函数错误的主要内容,如果未能解决你的问题,请参考以下文章

类不存在默认构造函数

通过将 cacheManager 迁移到构造函数注入,类不存在

Proguard - PersistenceException:构造函数与类不匹配

隐藏实用程序类构造函数:实用程序类不应具有公共或默认构造函数

公用的工具类不应该有公共的构造函数

错误 C2512:没有合适的默认构造函数可用(不是类)