8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

从类型“A”的右值对类型“A&”的非 const 引用进行无效初始化

Alejandro Carrera 1月前

25 0

#包括类 A { 公共:void fun() { fun2(); } ~A() = default; protected:virtual void fun2() = 0 ;};类 B:公共 A { protected:...

#include<iostream>

class A {

    public:
        void fun() { fun2(); }
        ~A() = default;
    protected:
        virtual void fun2() = 0 ;
};

class B : public A {
    protected:
        virtual void fun2() { std::cout<<"Hiiii";} 
};

class X {
    public:
        X(A& a) {
           a.fun();
        }  
};

class Y {

    public:
        Y( int x ) : val(x), x(B())
        {}
    private:
        int val;
        X x;
 };


 int main() {

    Y y(5);
 }

无法弄清楚为什么会出现以下编译错误:

prog.cpp:在构造函数“Y::Y(int)”中:prog.cpp:30:32:错误:从类型“A”的右值对类型“A&”的非 const 引用进行无效初始化 Y( int x ) :val(x),x(B()) ^prog.cpp:21:7:注意:初始化“X::X(A&)”的参数 1 X(A& a) { ^

帖子版权声明 1、本帖标题:从类型“A”的右值对类型“A&”的非 const 引用进行无效初始化
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Alejandro Carrera在本站《oop》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我明白你的意思,但你能帮助我理解为什么传递给 X 的 B() 应该是 const 吗?

  • 因为的构造函数 X 接受一个引用,而 你不能通过引用传递一个临时的 .

    要修复此问题,请使 X 构造函数采用 const 引用。然后, fun fun2 设为 const,以便代码进行编译。

  • @ChetanKole 别客气!如果该答案解决了问题,请将其标记为已接受 :)

返回
作者最近主题: