c++报错: No viable overloaded ‘=’ 临时变量与引用参数 const

对于一个函数的参数为引用,如果想接收临时变量,就必须加上 const。

class A{
public:
    A(int aa) {}
};

void f(A& a) {

};

int main(int argc, char* avgv[])
{

    f(A(5));//报错:必须为左值
    return 0;
}

因为

A(5)

是个临时变量。需改成 A b=A(5); f(b);这时b才是左值,可以做引用。

或者将函数原型加上const即可:

void f(const A& a) {

};
Matrix4& Matrix4::operator=(Matrix4& m) {
    for(int i = 0; i < 16; i++) {
        mat[i] = m.raw()[i];
    }
    return *this;
}

Matrix4 t = Matrix4::translation(elapsed * speed + lastPos, 0.0, 0.0);
matrix = matrix * t; //ERROR HERE

这里一个临时对象不能绑定到一个”非const引用”上。所以要定义成:

Matrix4& Matrix4::operator=(<span><strong>const</strong> </span>Matrix4& m) {

not ok:

class B {};

class A {
const B b_;
void set(const B& b) { b_ = b; }
};

const b = const b没有定义

Original: https://www.cnblogs.com/bigben0123/p/15190080.html
Author: Bigben
Title: c++报错: No viable overloaded ‘=’ 临时变量与引用参数 const

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/535440/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • android C/C++ source files 全局宏定义 .

    \system\core\include\arch\linux-arm AndroidConfig.h ======================================…

    C++ 2023年5月29日
    080
  • C++11多线程

    在C++11之前,C++语言层面是不支持多线程的,想利用C++实现并发程序,借助操作系统的API实现跨平台的并发程序存在着诸多不便。在C++11中,终于提供了多线程的标准库,提供了…

    C++ 2023年5月29日
    052
  • 【转】C++智能指针的正确使用方式

    对象所有权 首先需要理清楚的概念就是对象所有权的概念。所有权在 rust 语言中非常严格,写 rust 的时候必须要清楚自己创建的每个对象的所有权。 但是 C++ 比较自由,似乎我…

    C++ 2023年5月29日
    053
  • CLion之C++框架篇-优化框架,引入boost(三)

    背景 结合上一篇CLion之C++框架篇-优化框架,单元测试(二) ,继续进行框架优化!这一版优化引入一个我们日常经常使用的操作库Boost,估算使用频率在70%以上! Boost…

    C++ 2023年5月29日
    076
  • C++常用的设计模式

    单例模式: 单例模式:确保一个类只有一个实例,并且这个实例化向整个系统提供 (例如只有一台打印机,可以有多个打印任务队列,但是只能有一个正在打印)。单例模式又分为(饿汉模式,懒汉模…

    C++ 2023年5月29日
    046
  • c++以代理的方式来实现接口化编程

    假如你项目代码本身已经实现了很多的实体类,但并未采用接口,可以考虑以这种方式来实现接口化编程 struct ITest { virtual void Test()=0; }; cl…

    C++ 2023年5月29日
    067
  • C++解决share_ptr造成的循环引用

    参考链接:https://blog.csdn.net/yc2zgh1314/article/details/51264963 https://www.cnblogs.com/dua…

    C++ 2023年5月29日
    046
  • C++11 静态断言 static_assert

    我们知道,C++现有的标准中就有assert、#error两个方法是用来检查错误的,除此而外还有一些第三方的静态断言实现。 assert是运行期断言,它用来发现运行期间的错误,不能…

    C++ 2023年5月29日
    046
  • Windows11搭建c/c++开发环境

    有了”c/c++”分类下的前边那些”基本概念1-9″以及”Windows上的gcc”的铺垫,终于可以搭建开发…

    C++ 2023年5月29日
    072
  • 聊聊 C++ 右值引用 和 移动构造函数

    一: 背景 最近在看 C++ 的右值引用和移动构造函数,感觉这东西一时半会还挺难理解的,可能是没踩过这方面的坑,所以没有那么大的深有体会,不管怎么说,这一篇我试着聊一下。 二: 右…

    C++ 2023年5月29日
    051
  • EclipseC++学习笔记-4 使用win11 wslg 启动应用

    wslg在win10下无法安装,升级win11后才可以基本按网上方法都能安装成功,但需要注意两点1、wsl –update2、如果启动程序不报错,但是不显示窗口的话 e…

    C++ 2023年5月29日
    040
  • c++ 解析yaml文件

    一直用c++操作 ini做配置文件,想换成 yaml,在全球最大的同性交友网站 github上搜索,看有没有开源的库,功夫不负有心人,找到了yaml-cpp,试着解析了一个 yam…

    C++ 2023年5月29日
    061
  • C++ mutable的用法

    mutalbe的中文意思是”可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制…

    C++ 2023年5月29日
    050
  • Guide into OpenMP: Easy multithreading programming for C++

    The for construct splits the for-loop so that each thread in the current team handles a di…

    C++ 2023年5月29日
    065
  • C++ lamda、function、bind使用

    参考资料: lambda 表达式的简单语法如下:[capture] (parameters) -> return value { body } 其中[capture]可以选择…

    C++ 2023年5月29日
    042
  • EclipseC++学习笔记-3 直接在wsl2中启动带界面应用

    1、下载https://sourceforge.net/projects/vcxsrv/2、安装运行 注意不要多次启动最后一步可以保存为快捷方式,下次直接双击启动3. 设置WSL …

    C++ 2023年5月29日
    065
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球