no known conversion from ‘const char [4]‘ to ‘std::__cxx11::string &‘ (aka ‘basic_string<char…引用传参问题

C++:invalid conversion from ‘unsigned char *‘ to ‘const char *‘ 阅读详情
AI摘要

本文探讨了C++中构造函数使用普通引用作为参数时出现的问题,特别是当尝试传递字面值时发生的编译错误,并给出了正确的解决方案。

今天测试一段代码时遇到报错:
qt错误信息
**重点是这句“no known conversion from ‘const char [[4]]’ to ‘std::__cxx11::string &’ (aka ‘basic_string &’) for 1st argument……”

代码如下:**

h文件中声明类如下:

class Person 
{
public:
    Person( string &name, int age);
    virtual ~Person();
    virtual void func();

private:
    PersonImpl *mPersonImpl;
};

man函数中:

int main()
{
    Person *people = new Person("Tom", 12);
    return 0;
}

报错原因:

把函数不会改变的形参定义为(普通的)引用【应为const引用】是一种比较常见的错误。

导致[1]:

1.误导函数可以修改它的实参的值;
2.极大限制函数所能接受的实参类型【不再能接受const对象、字面值、需要类型转换的对象】

解决:

    Person( string &name, int age);
    Person(const string &name, int age); //修改为常引用

或者:

    string str("Tom");
    Person *people = new Person(str, 12);   //传string对象,而非字面量

参考文献:

[1] https://blog.youkuaiyun.com/goldcarpenter/article/details/81975241

个人c++ 错误记录 1.类定义输入运算符 >> 时候,代码最后应该检测 输入流是否为有效,如果无效,应该把输入对象置于默认初始化状态。 定义>>时候,类必须是非常量引用。定义<<,最好是常量引用。 定义的时候不能加friend. 2. ... 阅读详情

相关推荐

TP4056锂电池充电电路设计原理与工程实践

锂离子电池充电管理是嵌入式电源系统的核心基础技术,其本质是通过恒流恒压(CC/CV)控制策略,匹配电池电化学特性以实现安全、高效、长寿命充放电。TP4056作为典型线性充电IC,以精简外围实现预充、恒流、恒压及自动截止全周期管理,但受限于线性拓扑的热耗散特性,必须协同散热设计、电阻精度选型与PCB布局进行系统级优化。该方案广泛应用于STM32智能小车、便携传感器节点等3.7V单节锂电供电场景,兼顾成本、可靠性与工程可实施性,是入门嵌入式硬件电源设计的关键实践范例。

weixin_36064575的博客 219

编译出错总结

一、类型匹配问题: 1、incompatible types in assignment of ‘char*’ to ‘char [64]’ 可以使用strcpy();解决。 2、error: assigning to an array from an initializer list //不能对数组赋值,只能对数组元素初始化或赋值。 3、[Error] ‘f’ was not declared in this scope f 没有进行声明 ...

cat_eat_fish 9326

GOM引擎单机传奇架设全攻略——从DBC2000配置到登录器生成

本文详细解析了使用GOM引擎架设单机传奇的完整流程,从DBC2000的安装配置、服务端部署、引擎控制器设置,到登录器生成与客户端补丁放置。文章重点解决了单机架设中的常见问题,如数据库路径配置、IP地址设置及Key.lic文件处理,旨在帮助玩家快速搭建稳定的个人游戏环境,体验GM乐趣。

weixin_28318011的博客 629

no known conversion for argument 1 from ‘std::string {aka std::basic_string<char>}’ to ‘const char*

报错 no known conversion for argument 1 from ‘std::string {aka std::basic_string<char>}’ to ‘const char* 解决 字符串后面加上.c_str()

FrankDura的博客 5910

路径规划:D*Lite寻路算法详解

D*Lite详解目录

mkr67n的博客 2万+

华硕天选3 win11+ubuntu20.04双硬盘双系统配置(包括ubuntu重启后无法成功进入、没有wifi图标的设置)

1、制作系统盘 2、分区 3、重启电脑按F2

baidu_38431960的博客 1万+

cannot convert ‘std::string {aka std::basic_string<char>}

编译器报错:cannot convert 'std::string {aka std::basic_string}' to 'const char*' for argument '1' to 'size_t strlen(const char*)'通过查阅资料才发现原因,s是一个string类型的变量,strlen要求的参数是char *。因此可以用size()来代替strlen()。

m0_58879955的博客 3385

新手必看:如何用T265和ROS实现无人机室内精准定位(附PX4参数配置)

本文详细介绍了如何使用Intel Realsense T265和ROS实现无人机室内精准定位,包括硬件准备、ROS数据流架构设计、PX4参数配置及系统验证。特别针对视觉SLAM技术在室内环境中的应用,提供了从零搭建到进阶优化的全流程解析,适合无人机开发新手快速上手。

weixin_30642561的博客 404

C开发人员的C ++类型转换

类型转换是使C ++具有更多类型安全性,更强大的功能,并且可以说服您在C上使用它。但是,当您是新手或从C背景移居时,这也是一个被低估的主题。 因此,我想出了一篇关于它的文章。 在这里,我们不仅会看到带有C开发人员示例的C ++类型转换,而且还将介绍为什么我们需要类型转换? & C ++类型的铸造作弊代码,C开发人员可以轻松记住和使用它。 尽管我不是专家,但是到目前为止,这是我从各种来源和5年以...

编程故事的地方 1793

【WRF编译-Lab1】使用自动脚本编译WRF:错误总结

WRF编译过程及错误总结

WW、forever的博客 83

机器人轨迹规划——三次样条轨迹1(基于速度的求解方法)

三次样条轨迹是利用三次样条曲线来对给定的一系列点进行插值,从而得到一个光滑的轨迹。三次样条因为每段的多项式次数最高都是三阶的,所以可以得到2阶导数连续,也就是加速度连续的轨迹。假设给定了一系列的点q0q1q2qnq0​q1​q2​...qn​,以及每个点对应的参数t0t1t2tnt0​t1​t2​...tn​,计算一条三次样条曲线sts(t)st,该曲线通过给定的点q0q1q2qnq0​q1。

出门搔白首,若负平生志 1471

qstring arg()使用

实验: QString i = "iTest";           // current file's number   QString total = "totalTest";       // number of files to process   QString fileName = "fileNameTest";    // current file's name    QSt

菜鸟进化史 1864

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

no known conversion for argument 1 from 'class-name' to 'class-name&'

声明复制构造函数,参数需要const修饰,若没有const修饰在VS编译环境下可以通过,但是Linux下使用g++编译,则会报错。 template class SmartPtr { public: TYPE* m_pData; public: SmartPtr() { m_pData = NULL; } SmartPtr(const SmartPtr &

xx780452700的博客 7030

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

三月刷题笔记(C++)

3-1 字形变换 —[Nm] 6. Z 字形变换 - 力扣(LeetCode) (leetcode-cn.com) 方法一:模拟 由于给定的字符串是按照z形保存,故按照特定顺序进行遍历。 其中 i 代表对应的行,通过 flag 进行变换方向。 当numsRow 为1或0时,其无法按z型保存,故直接返回。 详情见:Z 字形变换(清晰图解) - Z 字形变换 - 力扣(LeetCode) (leetcode-cn.com) class Solution { public: string con

qq_51137086的博客 2379

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

const float * [] no known conversion from ‘float **‘ to ‘const float **‘ for 2nd argument

const float* [] C语言与 C++ 语言的方式不同

eloudy的专栏 912

qt问题之no known conversion from ... to “const QObject *“ ...

函数体 connect(socket, SIGNAL(readyRead()), this, SLOT(hasPendingMessage())); 解决办法: 强制转换 connect(socket, SIGNAL(readyRead()), (const QObject *)this, SLOT(hasPendingMessage()));

fjunchao的博客 2541

String--cannot convert from 'const char *' to 'LPTSTR'错误

这种错误,很多情况下是类型不匹配 LPTSTR表示为指向常量TCHAR字符串的长指针 TCHAR可以是wchar_t或char,基于项目是多字节还是宽字节版本。 看下面的代码,代码来源:Example: Open a File for Reading DisplayError(TEXT("CreateFile")); void DisplayError(LPTSTR lpszFunction...

qq_39529180的博客 305

invalid conversion from ‘const char*’ to ‘char*’解决方法

string类的c_str函数返回的是const char类型,如果将它用作实参传递给char的形参就会报这个错误 解决方法:在调用是加(char *)转换一下,比如(char *)cfgfile.c_str()

random_repick的专栏 3万+

【错误记录】Android NDK 编译报错 ( no known conversion from ‘unsigned char *‘ to ‘const char *‘ )

1>./native/native.cpp(442,15): error GEF7559A7: no matching function for call to 'search_string' 1> strOut += search_string(pModuleName, ver[i].address(), ver[i].realSize() + ver[i].address(), 1>

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2656

no known conversion for argument 1 from ‘[some_class]' to ‘[some_class]&’ 传const引用而非引用

今天做list的迭代器时发现的问题 no known conversion for argument 1 from ‘[some_class]' to ‘[some_class]&’  解决方法,将==的参数传递方式改为(const &) 传const引用而非引用: 原因: How come a non-const reference cannot bind to a tempo

lck32578的专栏 1万+

C++中的二维数组定义和作为参数传递

c++定义二维数组的不同方式: 指定大小,如: const int MAXN = 20; int a[MAXN][MAXN]; 但这样无法做为函数参数传递。 定义大小为变量: int a[n][n]; 这在vs中会报错,但是g++和clang均可编译。但是形参为动态int**时传递参数会报错: no known conversion from ‘int [n][n]’ to ‘int **’ for 2nd argument 形参给定第二维的大小时可以传递。 动态申请内存: int **array =

m0_46363819的博客 644

linux 编译C++错误整理

1、undefined reference to `__gxx_personality_v0' 需要-l libstdc++

KUAILE123的专栏 8723

C++中常见的字符串类型转换

1.报错: const std::string' (aka 'const basic_string<char, char_traits<char>, allocator<char> >') to 'ATL::CStringT<wchar_t, ATL::StrTraitATL<wchar_t, ATL::ChTraitsCRT<wchar_t> > >::PCXSTR' (aka 'const wchar_t *') for 1st

liuzhen007的专栏 1816

C++ 类的注意事项

1,explicit关键字     在类的构造函数中,当构造函数只有一个输入变量时,如果不加入explicit关键字,那么它实际上定义了转换为此类类型的隐式转换机制,例如下面的代码:     class Sales_data { friend Sales_data add(const Sales_data&, const Sales_data&); friend std::istream

Buyi_Shizi的博客 896
上一篇: c++让代码只执行一次的方式
下一篇: PIMPL实现——通过this指针和接口纯虚函数实现客户端代码调用
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值