C++报错:没有与参数列表匹配的构造函数 (能确定类型是正确的)

原因:

构造函数定义的参数是“引用类型”,而你使用时,传入了临时变量

背景:

构造函数如下: 

  Ray(Vector3d& p, Vector3d& d);

错误代码如下: 

  Ray r1 = Ray(Vector3d(0.0f,0.0f,3.0f) , Vector3d(0.0f,0.0f,-1.0f));

解决方案如下:

1. 不要用临时变量,新建一个变量,然后把变量作为参数传进去

Vector3d a(0.0f, 0.0f, 3.0f);
Vector3d b(0.0f, 0.0f, -1.0f);
Ray r1 = Ray(a, b);

2. 给构造函数的参数,添加const

Ray(const Vector3d& p, const Vector3d& d);


------分隔-----


下面是AI生成的解析,供参考

对于构造函数 `Ray(Vector3d& p, Vector3d& d)`,你需要提供两个 `Vector3d` 类型的引用作为参数来初始化射线的起点和方向向量。在你的初始化代码中,确实提供了两个 `Vector3d` 对象,但是问题在于这两个对象是临时对象,无法绑定到非常量引用参数上。

具体来说,当你使用 `Vector3d(0.0f, 0.0f, 3.0f)` 和 `Vector3d(0.0f, 0.0f, -1.0f)` 创建临时对象时,它们是不可修改的临时对象,不能与非常量引用绑定。而你的构造函数参数声明为 `Vector3d&`,意味着它需要一个可修改的 `Vector3d` 对象的引用。

为了解决这个问题,你有几种选择:

1. 修改构造函数,使其接受常量引用参数:
   ```cpp
   Ray(const Vector3d& p, const Vector3d& d) : origin_{ p }, directionVector_{ d } {};
   ```

2. 将临时对象转换为可修改的引用对象。但是这种方法并不推荐,因为临时对象的生命周期可能不会长于构造函数调用,这样做可能会导致悬空引用的问题。

3. 将临时对象存储为变量,然后将这些变量传递给构造函数:
   ```cpp
   Vector3d origin(0.0f, 0.0f, 3.0f);
   Vector3d direction(0.0f, 0.0f, -1.0f);
   const Ray camera(origin, direction);
   ```

关于 `Vector3d& p`,`&` 符号是引用符号,表示这个参数是一个引用,而不是一个拷贝。引用允许函数修改调用者提供的实际对象,而不是对象的拷贝。在这种情况下,`Vector3d& p` 接受一个 `Vector3d` 类型的引用作为参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/14824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web4.0-元宇宙虚拟现实

互联网一直在不断演变和改变我们的生活方式,从Web逐渐 1.0时代的静态网页到Web 2.0时代的社会性和内容制作,再从Web逐渐 在3.0阶段,互联网发展一直推动着大家时代的发展。如今,大家正站在互联网演化的新起点上,迈入Web…

Loongnix20.5系统ssh无法远程登陆问题

1. 确认客户端与服务器网络通信正常,能ping通。 2. 确认已启动ssh服务。 service ssh start后ssh登录正常。

微信hook协议3.84最新版

PC微信接口使用说明 用户故事 更新日志 登录与退出 获取进程端口占用信息 获取微信进程总数 启动微信 点击登陆微信 刷新并获取登录二维码 获取登录二维码数据(可以不调用) 获取微信登陆状态 退出微信 结束微信 个人信息管理 获取个人详细信息 保存收款码 获取本人地址 修改本人…

如何彻底搞懂装饰器(Decorator)设计模式?

对于任何一个软件系统而言,往现有对象中添加新功能是一种不可避免的实现场景,但这一实现过程对现有系统的影响可大可小。从架构设计上讲,我们也知道存在一个开闭原则(Open-Closed Principle,OCP)&#xff0…

android git提交代码命令以及常见命令的使用

安装Git Ubuntu: sudo apt-get install git-core创建代码仓库: 配置身份: git config --global user.name "Tony" git confit --global user.email "tonygmail.com"查看身份: git config --global user.…

【简单介绍下7-Zip,什么是7-Zip?】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

FFmpeg源码:#define IMAGEAUTO_DEMUXER(imgname, codecid) 宏定义分析

在FFmpeg源码(以5.0.3版本为例)目录下的libavformat/img2dec.c中存在如下宏定义 #define IMAGEAUTO_DEMUXER(imgname, codecid)\ const AVInputFormat ff_image_ ## imgname ## _pipe_demuxer {\.name AV_STRINGIFY(imgname) "_pipe&q…

C++语言学习(五)—— 类与对象(一)

目录 一、类类型的定义 二、类成员的访问控制 2.1 什么是"类内"和"类外" 2.2 对于访问控制属性的说明 三、类类型的使用 3.1 进行抽象 3.2 声明类 3.3 实现类 3.4 使用类 四、构造函数的引入 五、析构函数的引入 六、重载构造函数的引入 6.1 …

Redis防止缓存穿透和接口的幂等性!!!

场景:我们在访问商品详情页面的时候,会通过商品的id去查询商品的详细信息,这时候我们的接口就会暴漏,为防止缓存穿透,我们通过reids的 实现了接口的幂等性。 代码示例: package com.beimao.service;import…

ip地址分类简介

$$A类:网络号8位,主机号24位。A类地址适用于大型网络,能够支持最大的网络节点数。 A类地址特征:网络号首位为0。 00000000.00000000.00000000.00000000 - 01111111.11111111.11111111.11111111 换算为十进制为: 0.0.0.…

一文读懂“双随机、一公开”:企业监管新风向

在这个信息透明化、法治化日益增强的时代,政府对企业监管的方式也在不断创新和完善。“双随机、一公开”作为一种新型监管模式,正逐渐成为市场监管领域的关键词。对于企业或个体工商户而言,了解并适应这一监管机制,对于维护自身合…

工具分享:VsCode注释神器,koro1FileHeader

他是有官方Wiki的。 https://github.com/OBKoro1/koro1FileHeader/wiki/ 项目在GitHub上开源。以下摘录部分wiki,用作介绍分享在这里插入代码片 如何找到setting.json设置模板 简单的输入命令 打开VSCode命令面板: mac: command p window: ctrl p输入> Ope…

9.5 Go语言入门(条件语句和循环语句)

Go语言入门(条件语句和循环语句) 目录四、条件语句和循环语句1. 条件语句1.1 if 语句1.2 if-else 语句1.3 if-else if-else 语句1.4 带初始化语句的 if1.5 switch 语句1.6 带条件的 switch1.7 多个条件的 case 2. 循环语句2.1 基本 for 循环2.2 省略初始…

【C++风云录】领略嵌入式世界:嵌入式系统与实时操作系统

打开嵌入式的门:从理论基础到实践应用 前言 在这篇文章中,我们将深入探讨六种不同的嵌入式操作系统,分别是ChibiOS, RIOT OS, eCos, NuttX, Contiki和FreeRTOS。每个操作系统都将包括四部分内容:定义、特性、如何在嵌入式系统中…

Maven或Gradle构建java项目的优势

使用Maven或Gradle这样的构建工具构建项目与直接在Eclipse中构建Java项目存在多个方面的区别。以下是一些关键的差异和优势: 1. 项目结构和依赖管理 Eclipse普通Java项目 项目结构:通常比较简单,只有 src 目录用于存放源代码。依赖管理:依赖库需要手动下载并添加到项目的…

Flowable第一次启动MYSQL8.0版本(踩坑)

flowable工作流项目第一次启动报错表不存在,是因为连接mysql数据库的时候没有设置&nullCatalogMeansCurrenttrue,mysql5.0以上该配置默认为flase,即不操作本数据库。因此需要修改为true。datasource:url: jdbc:mysql://127.0.0.1:3306/fl…

从零开始搭建SpringCloud Alibaba微服务架构

Spring Cloud Alibaba是Spring Cloud的一个拓展项目,它用于构建基于阿里巴巴的微服务应用。它提供了多个阿里巴巴的开源组件,如Nacos、Sentinel、Dubbo等,用于解决微服务架构中的服务注册、配置管理、流量控制等问题。 Spring Cloud Alibaba…

记.netcore部署到银河麒麟linux服务器过程详解

一.服务器配置 操作系统:银河麒麟桌面操作系统V10 CPU:intel i5 内存:16G 内核:5.10.0.8-generic 未激活 二.运行环境安装 .netcore 6.0 runtime时安装下载离线包 Download .NET 6.0 (Linux, macOS, and Windows) -下载完后进行解压 sudo su #提权 mkdir -p $HOME/…

Flutter底部导航栏和顶部Tab切换完整代码

题记 —— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天。 目前市场上绝大部分App的布局结构基本统一:底部导航顶部导航,底部导航页里嵌套顶部导航栏,顶部导航页里嵌套图文…

功能测试:核心原理、挑战以及解决之道

在软件开发生命周期中,功能测试占据了至关重要的位置。它是确保软件应用按照既定的要求和规格运行的关键测试阶段。功能测试的目的在于验证软件的功能、行为和用户界面等是否达到了业务需求的标准。本文将深入探讨功能测试的概念,执行过程中可能遇到的挑…