public:
string str;
Test(string& str){
this->str=str;
cout<<"constructor"<<endl;
}
};
int main() {
Test t="test";
return 0;
}
在此代码中我收到错误"..\src\Test.cpp:30:9: error: conversion from 'const char [5]' to non-scalar type 'Test' requested "
?
那为什么下面的代码就可以了呢?
#include <iostream>
using namespace std;
class Test{
public:
string str;
Test(string str){
this->str=str;
cout<<"constructor"<<endl;
}
Test(const Test &test){
cout<<"copy constructor"<<endl;
this->str=test.str;
}
};
int main() {
Test t=Test("test");
return 0;
}
Test t="test";
这试图:
- 转换字符串文字(这是一个字符数组,
char[5]
) 变成临时的string
- 转换临时的
string
to Test
失败的原因有两个:
- 隐式转换序列不能涉及多个用户定义的转换。这里需要两个。
- 临时变量不能绑定到非常量变量lvalue参考,这是你的转换构造函数
Test(string&)
wants.
您的第二个示例通过以下方式解决了这些问题:
- 进行转换
string
to Test
明确的,Test(...)
。现在只有一种隐式转换,从char[5]
to string
。请注意,这是一种相当冗长的初始化方式;Test t("test")
也会做同样的事情。
- 声明转换构造函数采用
string
按价值,而不是参考。常量引用,const string&
,也可以工作,就像const char*
.
这两项更改都是必要的,因为每项更改都只解决了两个问题之一。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)