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

c ++编译"错误:'='标记之前的预期构造函数,析构函数或类型转换"

这个错误提示是在C++编译过程中出现的,表示在类的定义中,编译器遇到了一个构造函数、析构函数或类型转换函数的定义中,出现了一个等号(=)符号,这是不允许的。

以下是一些可能的原因和解决方案:

  1. 构造函数或析构函数的定义中不应该出现等号符号。例如,如果你定义了一个构造函数,应该使用圆括号而不是等号,例如:
代码语言:txt
复制
class MyClass {
public:
    MyClass(int x) {
        // 构造函数的实现
    }
};

而不是:

代码语言:txt
复制
class MyClass {
public:
    MyClass(int x) = {
        // 构造函数的实现
    }
};
  1. 如果你想要定义一个类型转换函数,应该使用关键字operator,并且在函数名称后面加上要转换的类型,例如:
代码语言:txt
复制
class MyClass {
public:
    operator int() {
        // 类型转换函数的实现
    }
};

而不是:

代码语言:txt
复制
class MyClass {
public:
    int operator() {
        // 类型转换函数的实现
    }
};
  1. 如果你想要定义一个默认构造函数,应该使用关键字default,例如:
代码语言:txt
复制
class MyClass {
public:
    MyClass() = default;
};

而不是:

代码语言:txt
复制
class MyClass {
public:
    MyClass() = {
        // 默认构造函数的实现
    }
};

总之,这个错误提示表示在类的定义中,编译器遇到了一个构造函数、析构函数或类型转换函数的定义中,出现了一个等号(=)符号,这是不允许的。你需要检查你的代码,确保你正确地定义了这些函数,并且遵循了C++语法规则。

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

相关·内容

C++类构造函数函数

C++中每个类都有其构造函数,它们负责对象创建和对象清理和回收,即使我们不写这两个,编译器也会默认为我们提供这些构造函数。...下面仍然是通过反汇编方式来说明C++中构造函数是如何工作。...编译器是否真的会默认提供构造函数 在一般讲解C++书籍中都会提及到当我们不为类提供任何构造函数编译器会默认提供这样六种成员函数:不带参构造,拷贝构造,“=”重载函数函数,以及带const...另外几种就不再一一进行说明,它们情况与上面的相似,有兴趣可以自己编写代码验证。另外需要注意是,只要定义了任何一个类型构造函数,那么编译器就不会提供默认构造函数。...最后总结一下默认情况下编译器不提供这些函数,只有父类自身有构造函数,或者自身父类有虚函数时,编译器才会提供默认构造函数

1.6K10

C++核心准则C.82:不要在构造函数函数中调用虚函数

C.82: Don't call virtual functions in constructors and destructors C.82:不要在构造函数函数中调用虚函数 Reason...到目前为止,被调用函数应该只属于构造对象本身,而不是可能存在于派生类中某个覆盖函数。那样做非常难理解。...最坏情况,在构造函数或者函数中直接间接调用一个没有实现纯虚函数会导致没有定义行为。...从构造函数函数中调用虚函数并不是本身有什么错误。这种调用语义是安全。然而,经验表明这样调用很少是必须,很容易扰乱维护者,如果被新手使用会成为错误源。...提示来自构造函数函数函数调用。

74750

C++-编写类String构造函数函数和赋值函数

浏览量 2 说到这题就想到了我很早之前一次面试,就是由于这题被面试官说一文不值(当然说得也不错),这题是c++里面的基本题目,据说能够完整写出来的人,基础就达到了及格以上水平,在后续面试里面就没有看到这样题目...已知类String原型为: class String { public: String(const char *str = NULL); // 普通构造函数 String(const String...&other); // 拷贝构造函数 ~ String(void); // 函数 String & operator =(const String &other); // 赋值函数 private...m_data = new char[length+1]; // 若能加 NULL 判断则更好 strcpy(m_data, str); } } // String函数...String::~String(void) { delete [] m_data; // delete m_data; } //拷贝构造函数 String::String(const String

57610

C++ 构造函数函数调用虚函数注意事项

虽然可以对虚函数进行实调用,但程序员编写虚函数本意应该是实现动态联编。在构造函数中调用虚函数函数入口地址是在编译时静态确定,并未实现虚调用。...但是为什么在构造函数中调用虚函数,实际上没有发生动态联编呢? 第一个原因,在概念上,构造函数工作是为对象进行初始化。在构造函数完成之前,被构造对象被认为“未完全生成”。...在Visual C++中,包含虚函数类对象虚指针被安排在对象起始地址处,并且虚函数表(vtable)地址是由构造函数写入虚指针。...同样,在函数中调用虚函数函数入口地址也是在编译时静态决定。也就是说,实现是实调用而非虚调用。 考察如下例子。...b退出作用域时,会先调用类B函数,然后调用类A函数,在函数~A()中,调用了虚函数show()。

91610

C++:39---继承中构造函数函数关系

如果类中定义对象有构造函数,则该类初始化自己构造函数时,要先初始化该对象构造函数 总结:在构造自己之前,需要先构造类内其他对象 注意事项: 类中定义其它类对象必须在构造函数初始化列表初始化...= data; } ~B() {} }; 三、继承中父、子类构造函数函数执行顺序 构造函数执行顺序: 第一步:先构造父类构造函数 第二步:如果类中定义了其他类对象,再初始化其他类构造函数...第三步:最后初始化自己构造函数 函数执行顺序: 与构造函数执行顺序相反 第一步:先执行自己函数 第二步:如果类中定义了其他类对象,再执行其他类函数 第三步:最后执行父类函数...但子对象必须在成员初始化列表进行初始化 四、单继承中构造函数函数执行顺序 下面代码中: 构造函数执行顺序为:2-1-3 函数执行顺序为:6-4-5 //单继承 class M { int m_data...、函数执行顺序 下面代码中: 构造函数执行顺序为:1-2-3 函数执行顺序为:6-5-4 //多继承 class A { int a_data; public: A(int data) { a_data

98020

C++四个默认函数构造函数函数,拷贝函数,赋值函数

C++中,对于一个类,C++编译器都会为这个类提供四个默认函数,分别是: A() //默认构造函数 ~A() //默认函数 A(const A&) //默认拷贝构造函数 A& operator...函数构造函数相对立函数,这个函数在对象销毁之前自动调用,例如在构造函数中,我们为成员变量申请了内存,我们就可以在函数中将申请内存释放,函数写法是在构造函数基础上加一个~符号...这个例子调用是默认拷贝构造函数(注意看控制台显示,调用了一次构造函数和两次函数),可以看出两个对象成员变量地址是不一样,当成员变量不存在指针类型是,这样做没什么问题,当类中有指针变量,自动生成拷贝函数注定会出错...可以看到两个对象指针成员所指内存相同(内存里面存着字符串:花狗),还记得函数作用吗,在对象销毁之前自动调用,在构造函数中,我们为成员变量申请了内存,我们就可以在函数中将申请内存释放。...,如果想要进行预期加减乘除之类运算,或者是像内置类型一样,用cout输出一个类对象,这些都是需要我们来用代码告诉机器怎么做,都是需要我们来指定

2.2K20

C++核心准则C.127:包含虚函数类应该有虚函数保护函数

C.127: A class with a virtual function should have a virtual or protected destructor C.127:包含虚函数类应该有虚函数保护函数‍...包含虚函数类通常(大多数情况下)通过指向基类指针使用。通常,最后一个使用者必须通过指向基类指针调用delete操作,通常是指向基类智能指针,因此函数应该是公开函数。...稍微特殊一些情况是:如果不希望支持通过指向基类指针销毁对象,函数应该是保护非虚函数。参见C.35。...包含虚函数函数要么是公开函数,要么是保护非虚函数。...提示针对包含虚函数却没有虚函数销毁操作。

74720

C++构造函数函数中抛出异常注意事项

从语法上来说,构造函数函数都可以抛出异常。但从逻辑上和风险控制上,构造函数函数中尽量不要抛出异常,万不得已,一定要注意防止资源泄露。在函数中抛出异常还要注意栈展开带来程序崩溃。...因为在构造函数中抛出异常,在概念上将被视为该对象没有被成功构造,因此当前对象函数就不会被调用。...由于在类B构造函数中抛出了异常,而此异常并未在构造函数中被捕捉,所以导致类B构造函数执行中断,对象b并未构造完成。在类B构造函数“回滚”过程中,c函数和类A函数相继被调用。...} } 在面对函数中抛出异常时,程序猿要注意以下几点: (1)C++中函数执行不应该抛出异常; (2)假如函数中抛出了异常,那么你系统将变得非常危险,也许很长时间什么错误也不会发生...;但也许你系统有时就会莫名奇妙地崩溃而退出了,而且什么迹象也没有,不利于系统错误排查; (3)当在某一个函数中会有一些可能(哪怕是一点点可能)发生异常时,那么就必须要把这种可能发生异常完全封装在函数内部

2K10

C++】继承 ⑧ ( 继承 + 组合 模式类对象 构造函数函数 调用规则 )

一、继承 + 组合 模式类对象 构造函数函数调用规则 1、场景说明 如果一个类 既 继承了 基类 , 又 在类中 维护了一个 其它类型 成员变量 , 那么 该类 构造 , 就需要涉及到...类 本身 构造函数函数 , 父类 构造函数函数 , 类 成员变量 构造函数函数 ; 2、调用规则 在 继承 + 组合 情况下 , 构造函数函数 调用规则如下...自身定义 构造函数 ; 函数 : 自身 -> 成员 -> 父类 ; 首先 , 调用 自己 函数 ; 自身定义 函数 ; 然后 , 调用 成员 函数 ; 也就是 成员变量 类型...<< "C 函数调用" << endl; } public: int z; D d; }; 可根据下面的调用规则 , 分析出 C 类对象中 , 涉及到 父类构造/函数 , 自身构造/函数...; 然后分析 函数 调用顺序 ; C 函数 , 是 自身构造函数 ; D 函数 , 是 成员构造函数 ; A 和 B 函数 , 是 父类构造函数 ; 函数调用顺序为 : 自身

16310

C++】继承 ⑦ ( 继承中对象模型分析 | 继承中构造函数函数 )

int 类型空间 ; 3、问题引入 - 派生类对象构造函数函数调用 上述 继承 过程中 , 每一层继承 , 都继承了上一级 父类 成员变量 , 同时自己也定义了新成员变量 ; 在 派生类对象...system("pause"); return 0; } 二、继承中构造函数函数 ---- 1、子类构造函数函数调用顺序 继承中构造函数函数 : 子类构造 : 子类对象 进行..., 再调用 子类 构造函数 , 构造 子类 自己定义成员 ; 子类 : 子类对象 进行 时 , 需要调用 父类 函数 对 继承自父类 成员变量 进行 操作 ; 函数调...用顺序如下 : 时 , 先 调用 子类 函数 , 子类 自己成员 ; 然后 , 再调用 父类 函数 , 继承自父类成员 ; 2、子类构造函数参数列表 如果...C 函数调用 B 函数调用 A 函数调用

19740

C++修行之道】类和对象(二)类6个默认成员函数构造函数函数

2.4 一般情况,建议每个类,都可以写一个全缺省构造(好用) 三、函数 3.1 概念 3.2 特性 3.3 C++实现括号匹配和C语言不同 一、类6个默认成员函数 如果一个类中什么成员都没有,...函数:与构造函数功能相反,函数不是完成对对象本身销毁,局部对象销毁工作是由编译器完成。而对象在销毁时会自动调用函数,完成对象中资源清理工作。...注意:函数不能重载 对象生命周期结束时,C++编译系统系统自动调用函数。...关于编译器自动生成函数,是否会完成一些事情呢?下面的程序我们会看到,编译器生成默认函数,对自定类型成员调用它函数。...但是:main函数中不能直接调用Time类函数,实际要释放是Date类对象,所以编译器会调用Date类函数,而Date没有显式提供,则编译器会给Date类生成一个默认函数

7210

C++:51---继承中构造函数函数、拷贝控制一系列规则

派生类释放时,先执行派生类函数,再执行基类函数 二、继承中被删除函数语法 基类派生类可以将其构造函数或者拷贝控制成员定义为删除。...规则如下: 如果基类中默认构造函数、拷贝构造函数、拷贝赋值运算符、函数是被删除或者是不可访问,则派生类中对应成员将是删除,原因是编译器不能使用基类成员来执行派生类对象中属于基类部分操作...如果在基类中有一个不可访问删除掉函数,则派生类中合成默认和拷贝构造函数将是被删除,因为编译器无法销毁派生类对象基类部分 编译器不会合成一个删除掉移动操作。...: 在基类构造函数执行时候,派生类部分是未定义状态 在基类函数执行时候,派生类部分已经被释放了 所以在基类构造函数函数中调用虚函数是不建议,因为: 虚函数在执行时候可能会调用到属于派生类成员...,而此时派生类可能还未构造/或者已经被释放了,因此程序可能会崩溃 所以建议: 如果构造函数函数调用了某个虚函数,则应该执行与构造函数函数所属类型相同函数版本(同属于一个类) 六、继承/重用基类构造函数

1.2K30

C++】构造函数初始化列表 ② ( 构造函数 为 初始化列表 传递参数 | 类嵌套情况下 构造函数 函数 执行顺序 )

/ 函数 执行顺序 ---- 1、构造函数 / 函数 执行顺序 类 B 中 定义了 A 类型 成员变量 ; A 类型对象 是 被组合对象 ; 构造函数执行顺序 : 在 初始化 B 类型 实例对象时..., 先执行 被组合对象 A 构造函数 , 如果 被组合对象 有多个 , 则 按照 成员变量 定义顺序 进行初始化 ; 注意 : 此处 不是按照 初始化列表 顺序 进行初始化 ; 函数执行顺序...: 函数构造函数 执行顺序 相反 ; 2、代码示例 - 构造函数执行顺序 下面的代码中 , 在 B 类中定义 A 类型 成员变量 ; 执行构造函数时 , 先调用 A 构造函数 , 再调用...B 构造函数 ; 执行函数时 , 与构造函数顺序相反 , 先执行 B 函数 , 再执行 A 函数 ; 代码示例 : #include "iostream" using namespace...执行 B 函数 执行 A 函数

20230

C++】从入门到精通第二弹——类构造函数

写在最前面的话 ——构造函数函数是两个特殊成员函数,都没有返回值,构造函数名和类名相同,函数名只是在类名前加上 ~ 构造函数主要用来在创建对象时给对象中数据成员赋值,主要目的是初始化对象..., 函数功能与构造函数正好相反,函数是用来释放对象,再删出对象前,对对象进行清理工作。...类构造函数 当建立一个类对象时,构造函数就会默认被调用,如果用户不提供构造函数编译器就会自动实现一个空构造函数。...全局变量在进入main函数之前调用构造函数,在程序终止时调用函数。 动态分配对象在使用new为对象分配内存时调用构造函数,使用delete删除对象时调用函数。...临时变量是编译器为支持计算自动产生,临时变量生存期开始和结束点会调用构造函数函数

11340

C++对象初始化和清理之构造函数函数分析与实例(一)

构造函数函数 对象初始化和清理也是两个非常重要安全问题 ​ 一个对象或者变量没有初始状态,对其使用后果是未知 ​ 同样使用完一个对象变量,没有及时清理,也会造成一定安全问题 c++利用了构造函数函数解决上述问题...对象初始化和清理工作是编译器强制要我们做事情,因此如果我们不提供构造编译器会提供 编译器提供构造函数函数是空实现。...构造函数分类及调用 两种分类方式: ​ 按参数分为: 有参构造和无参构造(默认构造函数) ​ 按类型分为: 普通构造和拷贝构造 三种调用方式: ​ 1.括号法(常用) ​ 2.显示法 ​ 3.隐式转换法...<< endl; mAge = p.mAge; } //函数在释放内存之前调用 ~Person() { cout << "函数!"...构造函数调用规则 默认情况下,c++编译器至少给一个类添加3个函数 1.默认构造函数(无参,函数体为空) 2.默认函数(无参,函数体为空) 3.默认拷贝构造函数,对属性进行值拷贝 构造函数调用规则如下

59420

C++】匿名对象 ③ ( 函数返回值为对象值时 匿名对象 拷贝构造函数函数 调用情况分析 )

, 以及不同使用场景下 , 匿名对象 创建与销毁情况 ; C++ 编译器 发现 使用 匿名对象 时 , 会根据 匿名对象 用法 , 决定对 匿名对象 处理 ; 匿名对象单独使用 : 如果只是单纯使用...此时 编译器 会将 匿名对象 值赋值给 已存在变量 , 并且立刻销毁该匿名对象 ; 2、拷贝构造函数回顾 在 【C++】拷贝构造函数调用时机 ① ( 使用一个对象初始化另外一个对象 | 将一个对象赋值给另外一个对象...类对象值 类型 , 不是 类对象 引用 指针 类型 时 , 返回 返回值 是一个 匿名对象 ; // 函数返回值是 Student 类型对象 Student fun() { Student...执行结果如下 : 调用带参数构造函数 m_age = 18 调用带参数构造函数 m_age = 12 调用拷贝构造函数 调用函数 : m_age = 12 调用函数 : m_age = 12..."); return 0; } 执行结果 : 调用带参数构造函数 m_age = 18 调用带参数构造函数 m_age = 12 调用拷贝构造函数 调用函数 : m_age = 12 调用函数

25720

c++学习笔记4,调用派生类顺序构造函数(一个)

大家好,又见面了,我是全栈君 测试源代码: //測试派生类构造函数调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include using namespace...a3也并没有调用基类构造函数"<<endl; A *a3=&a; B b; } 输出为: 能够看到,在创建派生类对象时候,首先调用是基类中构造函数,然后才是调用派生类自己构造函数...而在时候,顺序则刚好相反,先调用派生类函数,然后才是调用基类构造函数。这是由于对象创建时候对象存放在堆栈中原因。(new 对象尽管是存在堆中,可是在堆栈中依旧存放其堆中地址,因此。...时候也是一样) 那么,创建其对象数组时:A a[2],是否会调用其构造函数呢。这是肯定。...顺序似乎弄错了,郁闷。 还没收到面试信息。也还没有受到笔试挂了通知,也不知道是个什么情况啊。 保持。 有时,细节很重要!

67810

《Effective Modren C++》 进阶学习(上)

编译错误!要求变窄转换 只有当传入参数在编译器上无法转换成std::initializer_list中T类型,才会匹配普通构造函数。...C++11中实现一个空类,编译器会自动声明六个函数:默认构造函数函数、拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符。  ...理解特殊成员函数生成 在C++术语中,特殊成员函数是指自己生成函数C++98有四个:默认构造函数函数、拷贝构造函数和拷贝赋值函数。...「函数(Destructor)」 自动生成函数主要负责删除由对象所拥有的资源。对于类内部申请资源,如动态分配内存打开文件句柄等,编译器会在函数中自动释放这些资源。...如果类没有显式声明函数,则会生成默认函数,执行成员操作。 「拷贝构造函数(Copy Constructor)」 自动生成拷贝构造函数执行是浅拷贝,即逐个成员变量进行拷贝。

17020
领券