首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我如何修复“错误:调用隐式删除的‘YYMINORTYPE’默认构造函数”在lemon中?

这个错误信息表明你在尝试使用一个被标记为隐式删除的默认构造函数。在C++中,如果一个类的默认构造函数被删除,那么你就不能创建该类的实例而不传递任何参数。这通常是为了防止某些不希望发生的行为,比如资源泄露或者不一致的状态。

基础概念

  • 默认构造函数:一个不接受任何参数的构造函数。
  • 隐式删除:编译器自动删除某个函数,通常是因为它不符合某些规则或者有其他构造函数存在。

为什么会出现这个问题?

这个错误通常发生在以下几种情况:

  1. 类中定义了其他构造函数,但没有显式定义默认构造函数,编译器不会自动生成默认构造函数。
  2. 类中有成员变量,它们的默认构造函数被删除或者不可访问。
  3. 类使用了= delete来显式删除默认构造函数。

如何解决?

要修复这个问题,你可以采取以下几种方法之一:

方法一:显式定义默认构造函数

如果你希望类有一个默认构造函数,可以在类定义中显式地添加一个:

代码语言:txt
复制
class YYMINORTYPE {
public:
    YYMINORTYPE() = default; // 使用=default来让编译器生成默认构造函数
};

方法二:移除其他构造函数

如果你不需要其他构造函数,可以移除它们,这样编译器会自动生成默认构造函数:

代码语言:txt
复制
class YYMINORTYPE {
    // 移除其他构造函数
};

方法三:修改成员变量的定义

如果问题出在成员变量上,确保所有成员变量都有可用的默认构造函数:

代码语言:txt
复制
class SomeOtherClass {
public:
    SomeOtherClass() {} // 确保SomeOtherClass有一个默认构造函数
};

class YYMINORTYPE {
    SomeOtherClass member; // member现在有一个可用的默认构造函数
};

方法四:使用= delete时小心

如果你使用了= delete来删除默认构造函数,确保这是你想要的行为。如果你想要默认构造函数可用,就不要删除它。

示例代码

假设YYMINORTYPE类如下:

代码语言:txt
复制
class YYMINORTYPE {
public:
    YYMINORTYPE(int x) : value(x) {}
private:
    int value;
};

在这个例子中,因为定义了一个带参数的构造函数,编译器不会生成默认构造函数。要修复错误,可以添加一个默认构造函数:

代码语言:txt
复制
class YYMINORTYPE {
public:
    YYMINORTYPE() : value(0) {} // 添加默认构造函数
    YYMINORTYPE(int x) : value(x) {}
private:
    int value;
};

现在,YYMINORTYPE类有了一个默认构造函数,错误应该会消失。

应用场景

这种修复通常用于当你需要创建一个类的实例而不传递任何参数时。这在编写通用代码或者在初始化对象时非常有用。

通过以上方法,你应该能够解决“错误:调用隐式删除的‘YYMINORTYPE’默认构造函数”的问题。如果问题仍然存在,可能需要检查类的继承关系或者其他相关的类定义。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C ++ 中不容忽视的 25 个 API 错误设计!

因此,如果你的类只包含简单的数据类型,并且你计划使用隐式生成的移动构造函数,那么如果你定义复制构造函数则不可能。在这种情况下时,你必须显式定义移动构造函数。...错误#6:不将单个参数构造函数标记为显式 为什么这是一个API设计错误? 允许编译器进行一次隐式转换以将参数解析为函数。...结果,客户端有可能忘记正确的参数顺序并以错误的顺序传递它们。 如何解决这个问题? 这就是为什么除非你知道要支持隐式转换,否则应始终对任何单参数构造函数使用explicit关键字。...错误#9:使用隐式模板实例化时,使用模板实现细节来混淆公共头文件 在隐式实例化中,模板代码的内部必须放在头文件中。没有其他办法。...我如何以及在何处使用此代码,这对产生了极大的影响。例如如果这是一个同步调用,我永远不会在像游戏场景渲染循环这样的时间关键代码路径中使用它。 如何解决这个问题?

1.6K20

Solidity 0.7.0 新变化

仍然可以察觉到变化 用'var关键字声明一个变量,这样它的类型就会被隐式赋值已经被废弃了,已经有几个版本赞成使用显式类型的变量。但是,编译器仍然会识别出var语法,编译的时候抛出类型错误。...现在,var关键字是不允许的,并且会导致解析器错误。 在继承期间,函数状态的可变性现在可以变得更加严格。因此,具有默认可变性的public函数可以被view或pure函数覆盖。...这并不包括引用类型和重入调用的具体值。 JSON AST (抽象语法树) 十六进制字符串现在被标记为:“hexString”。 具有空值的成员将从输出中删除。...修正 继承:不允许公共状态变量覆盖纯函数。 NatSpec: 构造函数和函数具有一致的userdoc输出。 SMTChecker: 修复分配到1元组时的内部错误。...SMTChecker: 修复元组有额外有效括号时的内部错误。 状态可变性:常量公共状态变量被认为是纯函数。 类型检查器:修复了当函数调用已命名参数时函数类型的推断问题。

1.2K20
  • C++中final、override关键字和=default、=delete语法

    默认构造函数和删除默认构造函数 在C++中,默认构造函数是在没有显式定义任何构造函数时由编译器生成的。有时,我们可能需要显式指示编译器生成默认构造函数,或者删除默认构造函数。...构造函数委托 构造函数委托是指在一个构造函数中调用同一个类的其他构造函数。这在C++11及以后的版本中是可能的。...隐式生成的特殊成员函数 C++中的特殊成员函数有默认生成的版本,包括默认构造函数、析构函数、拷贝构造函数、拷贝赋值运算符等。在某些情况下,编译器会自动生成这些特殊成员函数。...=delete 语法用于显式删除默认的特殊成员函数,防止其被调用。 构造函数委托允许在一个构造函数中调用同一类的其他构造函数。...隐式生成的特殊成员函数是编译器自动生成的默认版本,它们包括默认构造函数、析构函数、拷贝构造函数等。

    39510

    C++中的explicitkeyword

    按默认规定,仅仅用传一个參数的构造函数也定义了一个隐式转换。...CExample objFour = 12; //运行了隐式转换,等价于CExample temp(12);objFour(temp);注意这个地方调用了 //编译器为我们提供的默认复制构造函数...但在大部分情况中,隐式转换却easy导致错误(不是语法错误,编译器不会报错)。隐式转换总是在我们没有察觉的情况下悄悄发生,除非有心所为,隐式转换经常是我们所不希望发生的。...通过将构造函数声明为explicit(显式)的方式能够抑制隐式转换。也就是说,explicit构造函数必须显式调用。...= “Brian”; //能够:隐式转换调用String(const char *p);再调用默认的复制构造函数 String s5(“Fawlty”); //能够:正常调用String(const

    46230

    CA1065:不要在意外的位置引发异常

    隐式强制转换运算符 以下各节讨论了这些方法类型。...静态构造函数 从静态构造函数引发异常将导致该类型在当前应用程序域中不可用。 从静态构造函数引发异常应具备充分的理由(如安全问题)。 终结器 从终结器引发异常将导致 CLR 快速失败,从而中断过程。...因此,应始终避免在终结器中引发异常。 Dispose 方法 System.IDisposable.Dispose 方法不应引发异常。...Dispose 通常作为 finally 子句中清理逻辑的一部分调用。 因此,从 Dispose 显式引发异常将强制用户在 finally 子句内添加异常处理。...隐式强制转换运算符 由于用户通常不知道已调用了隐式强制转换运算符,因此对它引发的异常会感到意外。 因此,隐式强制转换运算符不应引发异常。

    64120

    【重学 C++】06 | C++该不该使用 explicit

    文章首发【重学 C++】06 | C++该不该使用 explicit引言大家好,我是只讲技术干货的会玩code,今天是【重学C++】的第六讲,在 C++中,explicit关键字作用于类的构造函数或类型转换操作符...explicit的作用在C++中,默认允许隐式转换,隐式类型转换是指在表达式中自动进行的类型转换,无需显式地指定转换操作。...隐式转换合理使用场景拷贝构造函数和移动构造函数对于拷贝构造函数和移动构造函数,我们通常希望它们能够在需要时自动调用,以便进行对象的拷贝和移动操作。...test函数使用传值方式传递Foo对象,在函数调用时,会触发拷贝构造函数,但由于将拷贝构造函数定义为 explicit,编译器将无法隐式调用拷贝构造函数。...在拷贝构造函数和移动构造函数中,不推荐使用 explicit,以便编译器可以自动调用这些构造函数。

    25000

    文末送书 | 2020疫情期间前端妹子面试小记(含答案)

    ,但是有几个缺点: 原型链中包括引用类型的值时,会被所有实例共享 不能实现子类向超类的构造函数中添加属性 由此产生了借用构造函数继承,解决了原型链继承的缺点,它自身又有缺点:不能实现函数复用 //借用构造函数继承...4.es6 class默认使用严格模式 5.es6 class子类必须在父类的构造函数中调用super(),才有this对象;而es5是先有子类的this,再调用父类的方法应用再在this上面 复制代码...分为默认绑定、显式绑定、隐式绑定、apply/call/bind绑定、new绑定和箭头函数绑定 ❝默认绑定:严格模式下this指向undefined,非严格模式this指向window ❞ function...this.a会抛出一个错误,Cannot read property 'a' of undefined ❝隐式绑定 下面这段代码的输出是什么?...>new绑定>显示绑定/apply/bind/call>隐式绑定>默认绑定 箭头函数和普通函数区别 箭头函数没有prototype,所以箭头函数本身没有this 箭头函数的this指向在定义的时候继承自外层第一个普通函数的

    1K50

    Spring Security技术栈开发企业级认证与授权(十四)使用Spring Social集成QQ登录验证方式

    ,第二个参数的意思是在构造方法中构建restTemplate的时候,将accessToken作为请求参数集成到请求链接中 // 父类的默认构造也就是一个参数的构造,默认行为是将参数放到了请求头中...QQImpl的构造方法中调用了父类AbstractOAuth2ApiBinding的两个参数的构造方法,在父类的构造方法中,我们将第二个参数设置为TokenStrategy.ACCESS_TOKEN_PARAMETER...,这样在父类的构造方法中构建RestTemplate对象的时候,就会将accessToken放到请求参数中,如果调用一个参数的父类构造方法,那么它默认的行为是将accessToken放到请求头中,这就和...当用户选择QQ登录的时候,就会去创建一个QQImpl对象,在调用构造方法的时候,就会去事先设定好的链接获取该用户在应用中唯一的OpenID,拿到OpenID后就会调用getUserInfo方法来获取用户信息...还有一个问题,那就是社交登录默认拦截的是/auth,providerId也默认是qq,我该如何来实现自定义社交登录拦截地址呢?那么接下来我们一起来解决这两个问题。

    1.4K20

    【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解

    可以在类的声明中为成员变量提供默认值,这些默认值将在没有通过初始化列表显式初始化时使用。...对于引用类型、常量和没有默认构造函数的类类型成员,必须在初始化列表中进行初始化。 C++11 允许在成员变量声明时提供默认值,这些默认值会在初始化列表中未显式初始化时使用。...为了防止这些错误,C++允许我们使用explicit关键字修饰构造函数,这样可以禁止该构造函数参与隐式转换。...关键字阻止了A对象隐式转换为B对象,必须显式调用B的构造函数。...接下来,我们探索了C++中内置类型和类类型之间的类型转换,包括隐式和显式转换,并通过explicit关键字展示了如何避免因不当类型转换引发的潜在问题。

    35510

    【C++篇】C++类与对象深度解析(四):初始化列表、类型转换和static成员讲解

    可以在类的声明中为成员变量提供默认值,这些默认值将在没有通过初始化列表显式初始化时使用。...对于引用类型、常量和没有默认构造函数的类类型成员,必须在初始化列表中进行初始化。 4. C++11 允许在成员变量声明时提供默认值,这些默认值会在初始化列表中未显式初始化时使用。 5....2.1.1 隐式类型转换 在没有explicit关键字修饰构造函数的情况下,编译器会自动将符合构造函数参数类型的内置类型值隐式转换为类对象。...为了防止这些错误,C++允许我们使用explicit关键字修饰构造函数,这样可以禁止该构造函数参与隐式转换。...在上面的代码中: C 是全局变量,因此它的构造函数 C() 在 main 函数执行之前被调用。 A 和 B 是局部变量,它们的构造函数按照声明的顺序,在 main 函数中依次调用。

    7000

    JS入门难点解析7-this

    KYLE speak.call( you ); // Hello, 我是 READER 这段代码可以在不同的上下文对象(me 和 you)中重复使用函数 identify() 和 speak(),...obj1,this隐式绑定到obj1 obj1.foo();//1 //foo()函数的直接对象是obj2,this隐式绑定到obj2 obj1.obj2.foo();//2 对于隐式绑定,是最容易出现错误的地方...因为很容易出现所谓的隐式丢失。隐式丢失是指被隐式绑定的函数丢失绑定对象,从而默认绑定到window。我们来看一下哪些情况会出现隐式丢失。...(间接调用模式) 在分析隐式绑定时,我们必须在一个对象内部包含一个指向函数的属性,并通过这个属性间接引用函数,从而把 this 间接(隐式)绑定到这个对象上。...要注意以下几点: 构造函数通常不使用return关键字,它们通常初始化新对象,当构造函数的函数体执行完毕时,它会显式返回。在这种情况下,构造函数调用表达式的计算结果就是这个新对象的值。

    74810

    真没想到nullptr和NULL得区别,大了去了

    //构造函数 WidgetA w22();//调用一个没有形参的构造函数,结果变成声明一个函数而非对象 WidgetA w33{};//函数形参不能使用大括号来指定形参列表,所有使用大括号来完成对象的默认构造没有问题... il);//带有形参的构造 }; WidgetA1 ww;//调用的是默认构造 WidgetA1 WWW{};//依然是默认构造 WidgetA1 WWWW();//变成函数的声明了,令人头疼的语法...条款11:优先选用删除函数,而非private未定义函数 //宗旨:阻止调用函数得方法:函数未经声明,不可调用 //删除函数得优点1: //删除函数无法通过任何方法使用,所以即使成员和友元函数中得代码也会因试图复制...delete将复制构造函数和复制赋值运算符标识为删除函数 //C++11中 delete将复制构造函数和复制赋值运算符标识为删除函数 template函数能声明为 private //可以凑合看作是数值得型别,都可以隐式转型到 int ,因此阻止调用通过编译得方法 //为我们想要过滤得型别创建删除重载版本 bool isLucky(int

    1.8K30

    你不知道的this(2)

    1 绑定规则 默认绑定 隐式绑定 显示绑定 new绑定 默认绑定 最常用的函数调用类型:独立函数调用 function foo() { console.log(this.a); } var a =...因为在本例中,函数调用时应用了this的默认绑定,因此this默认指向全局对象。 那么我们怎么知道这里应用了默认绑定?...我们可以通过分析调用位置来看看foo()是如何调用的,在代码中,foo()是直接使用不加任何修饰符的函数引用进行调用的,因此只能使用默认绑定,无法引用其他规则。...之后我们会介绍如何通过固定this来修复(这里是双关,"修复"和"固定"的英语单词都是fix)这个问题。...在传统的面向类的语言中,"构造函数"是类中的一些特殊方法,使用new初始化类时会调用类中的构造函数。

    51610

    SqlAlchemy 2.0 中文文档(七十六)

    #3374 ### 关于没有预先存在的值的属性事件和其他操作的更改 在这个改变中,当访问一个对象时,默认的返回值None现在会在每次访问时动态返回,而不是在首次访问时通过特殊的“设置”操作隐式地设置属性的状态...这个改变的可见结果是,在获取时不会隐式修改obj.__dict__,并且对于get_history()和相关函数也有一些微小的行为变化。...#3374 关于没有预先存在值的属性事件和其他操作的更改 在这个改变中,当访问一个对象时,默认的返回值None现在会在每次访问时动态返回,而不是在第一次访问时隐式地使用特殊的“set”操作设置属性的状态...这个改变的可见结果是,obj.__dict__在获取时不会隐式修改,并且对于get_history()和相关函数也有一些轻微的行为变化。...这有助于修复一个 bug,即在支持的后端上,INSERT…FROM SELECT 结构会被错误地编译为“隐式返回”,这会导致在插入零行的情况下出现故障(因为隐式返回期望一行),以及在插入多行的情况下出现任意返回数据

    10510

    七、构造函数与析构函数

    调用顺序: 在创建派生类对象时,首先调用基类的构造函数,然后调用派生类的构造函数。 如果在类定义中显式地指定了初始化列表中的基类或成员变量初始化顺序,则按照指定的顺序进行初始化。...在对象赋值、函数参数传递、函数返回值等情况下,如果涉及同类型对象的复制,可能会隐式调用拷贝构造函数。...default; // 显式要求编译器生成默认拷贝构造函数 // ... }; delete delete关键字用于删除某些特殊的成员函数或者重载的函数,这意味着这些函数不能被调用,无论是显式调用还是隐式调用.... */ } // 显式构造函数 // ... }; void func() { MyClass obj = 10; // 错误:构造函数是显式的,不能用于隐式类型转换 MyClass...、删除某些函数以及防止隐式类型转换。

    14010

    Java中子类和父类的构造函数?

    如果没有,编译器会插入调用父类构造的语句。这就是为什么在创建子类对象时父类中的构造超函数会被调用。  这里没有创建两个对象,只有一个子对象。...在Java中,如果一个类没有定义构造函数,编译器会为类默认创建一个无参构造函数。如果在父类中定义了构造函数super(String s),在这种情况下,编译器将不会为类创建一个无参构造函数。...由于编译器试图插入super()这条语句到子类的两个构造函数中,但Super的默认构造函数没有被定义,所以编译器会报该错误消息。 ...3)子类中的显式调用父类构造函数  下面的代码是正常的:    子类(Sub)构造函数显式地调用父类(Super)中的带参构造参数。如果父类中定义了相对应的构造函数,那将会被正常良好的调用。  ...4)规则 简而言之,规则是:子类的构造函数必须调用父类中的构造函数,无论隐式调用还是显式调用,无论哪种方式,被调用的构造函数必须得先被定义。

    2.3K20

    TypeScript 5.4 Beta 中的新增功能

    TypeScript 5.4 Beta 刚刚发布,带来了一些令人兴奋的新功能,同时修复了一些错误并改进了一些用户体验。毫不拖延,让我们快速探索一下这些重大改进。...让我们考虑一个接收值列表的函数,例如这个示例中的水果,以及一个默认值。..."], "bomb");// 错误:类型 "bomb" 的参数不能赋值给类型 ("apple" | "lemon") 的参数这也可以工作,但它更加冗长,并且在签名中 D 可能不会在其他地方使用。..."], "bomb");// 错误:类型 "bomb" 的参数不能赋值给类型 ("apple" | "lemon") 的参数通过排除 defaultValue 类型,我们确保输入的任何内容都不包含在函数返回或推断的值的联合中...这允许在函数内更准确地缩小类型,解决了类型检查中的一个常见痛点。这只是引入的几个值得注意的变化之一。要获得更全面的概述,请参阅官方发布说明。希望您觉得这篇文章有用。如果您喜欢,请给个赞。

    19010

    C++ 复制控制之复制构造函数

    private:    float _price ;    string _bookName;   //.... }; 什么时候被调用 复制构造函数在需要复制类对象的时候被调用,这些调用情况可以总结为...,将隐式地调用复制构造函数。...(C++隐式类型转换),然后调用复制构造函数进行数组元素的复制。...如果类禁止隐式类型转换(构造函数使用了explicit声明),或希望不指定实参或多个实参,需要使用完整的构造函数语法,如数组最后一个元素的初始化。...类类型:调用该类的复制构造函数进行复制。 数组:这个比较特殊,因为我们知道一般不能复制数组,但在类中,复制数组时合成复制构造函数将复制数组的每一个值。

    79130

    SqlAlchemy 2.0 中文文档(五十八)

    现在在事务内调用 ping,与所有其他基于 pep-249 DBAPI 的其他后端隐式使用的方式相同;这确保了为此命令发送的一系列 PG 命令在同一个后端连接上调用,而不会在命令中途跳转到不同的连接。...这些构造已从数据类的角度进行了修改,假定为“只读”,默认设置 init=False,并不再包含在 pep-681 构造函数中。...此问题首次在 2.0.0b3 中修复,确认此情况通过测试套件工作,但是测试套件显然没有测试名称 Mapped 完全不存在的行为;字符串解析已更新以确保 ORM 如何使用这些函数。...必须首先显式调用Session.begin()方法,以便继续进行操作,否则在任何操作本应自动开始时都会引发错误。此选项可用于创建一个“安全”的Session,该会话不会隐式启动新事务。...现在,在事务中调用 ping,就像所有其他基于 pep-249 DBAPI 的后端隐式使用的一样;这保证了由于此命令发送的 PG 命令系列会在同一后端连接上调用,而不是在命令中间跳到不同的连接。

    16710

    JS 的6个不良编码习惯,现在就改掉吧!

    这些都是不良编码习惯的征兆。 在这篇文章中,我描述了JavaScript中常见的6种不良编码习惯。重要的是,本文还给出一些可行的建议,如何的摆脱这些坏习惯。...大多数运算符 +-*/==(不包括 ===)在处理不同类型的操作数时会进行隐式转换。...[]); // -> false 过度依赖隐式类型转换是一个坏习惯。首先,它使你的代码在边缘情况下不太稳定。其次,增加了引入难以重现和修复的bug的机会。 现在咱们实现一个获取对象属性的函数。...这些错误很难发现,要修复该函数,就要明确验证值的类型: function getPropFixed(object, propertyName, defaultValue) { if (object...应该尽量避免从函数返回 null,特别是使用 null作为参数调用函数。 一旦 null出现在调用堆栈中,就必须在每个可能访问 null的函数中检查它的存在,这很容易出错。

    1K10
    领券