class String
{
private:
static const int SZ = 80;
char str[SZ];
public:
String()
{
strcpy_s(str, " ");
}
String(char s[])
{
strcpy_s(str, s);
}
}
这是我写的构造函数,请注意第二个
在这里我正在使用它:
String s1 = "yes";
String s2 = "no";
String s3;
这是错误消息:
严重性代码描述项目文件行抑制状态错误 (正在运行)E0415没有合适的构造函数可从“ const”转换 char [4]“转换为” String“ rishabh c ++项目F:\ rishabh c ++ projects \ rishabh c ++ projects \ main.cpp 35
答案 0 :(得分:6)
编译器告诉您,从字符串文字到任何可用的构造函数都没有隐式转换。这背后的原因是可以使用以下类型构造您的类 的类型:
String(char s[]);
请注意,根据C ++标准,字符串文字是常量。这将 not 隐式转换为构造函数所需的非常量类型。为此,需要const_cast
,但请不要这样做!
如果您尝试进行显式构造,您还将得到一个错误(或至少一个警告):
String s1("yes"); // error
简单的解决方法是将参数更改为const char[]
(或者实际上更普遍使用const char*
)。
String(const char *s)
{
strcpy_s(str, s);
}
每当将指针或引用类型作为参数传递时,请始终问自己:“我的函数是否需要修改参数的值?” -只要答案为“否” < / em>设为const
。