错误:找不到合适的构造函数,即使我已经做了一个,C ++

时间:2018-11-07 09:36:32

标签: c++

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

1 个答案:

答案 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