首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从类型'A‘的右值初始化类型'A&’的非常数引用无效

从类型'A‘的右值初始化类型'A&’的非常数引用无效
EN

Stack Overflow用户
提问于 2018-07-02 00:20:29
回答 1查看 855关注 0票数 0
代码语言:javascript
复制
#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‘Y(Int X):val(x),x(B()) ^prog.cpp:21:7的r值初始化类型为'A&’的非常数引用无效。prog.cpp:21:7:注意:初始化'X:: X(A& )‘X(A& a) {^

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-02 00:27:48

因为X的构造函数接受引用,而you can't pass a temporary by reference

要修复它,请使X构造函数采用常量引用。然后,应将funfun2设置为常量,以便代码进行编译。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51125015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档