【问题标题】:invalid initialization of non-const reference of type ' ' from an rvalue of type ' '从“ ”类型的右值对“ ”类型的非常量引用进行无效初始化
【发布时间】:2016-11-18 09:56:29
【问题描述】:

我的代码有问题。

class RefC
{
    public:
        std::string cCommit;
        std::list<Commit>::iterator itc;

        RefC(
            const std::string &cod,
            const std::list<Commit>::iterator &it = std::list<Commit>::iterator()
        ):cCommit(cod), itc(it) {}

        RefC( const RefC &orig )
            : cCommit( orig.cCommit ), itc( orig.itc ) {}

        bool operator<(const RefC &rc) const
        {
            return cCommit < rc.cCommit;
        }
};

这是我的 RefC 课,但是当我叫她去做时:

indiceCommits.insertar(RefC(comm.getCodigo(),itc));

这个给我

从“GitCode::RefC”类型的右值初始化“GitCode::RefC&”类型的非常量引用无效

为什么?我该如何解决?

谢谢 ;)

【问题讨论】:

    标签: c++ netbeans


    【解决方案1】:

    问题不在于您的 RefC 类,而在于 insertar() 函数的声明。我猜它看起来像

    insertar( RefC& r);
    

    但你想传递一个临时对象(右值),这只有在参数类型是 const-ref 时才有可能

    insertar( const RefC& r);
    

    rvalue 表示只能在赋值右侧的值,例如x = y, x 必须是左值,通常是有名字的东西,可以赋值的东西,而右值(y)可以是常量、文字、临时对象等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-08
      • 1970-01-01
      • 2020-05-15
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      • 2012-08-02
      相关资源
      最近更新 更多