我有一些错误有人可以帮助我吗

问题描述

error: incompatible types in assignment of 'std::__cxx11::string' {aka'std::__cxx11::basic_string<char>'} to 'char [100]'
error: cannot convert 'std::__cxx11::string' {aka 'std::__cxx11::basic_string<char>'} to 'const char*'

我得到了这些代码行的上述两个错误

    string s1=asctime(localtime(&timetoday));;
    string r=s1.substr(4,6);
    ch=r;                        //char ch[100];(defined aleady)
    //1st error was in line just above this comment
    if(strcmp(r,"Dec 20")==0)
 //2nd error was in line just above this comment
    {
        cout<<"made my first try for creating this program";
    }
    else if(strcmp(r,"Dec 21")==0)
    {
        cout<<"Shortest day of the year";
    }

我正在尝试使用代码块在 C++ 中创建一个简单的余数程序。

解决方法

代码不完整,即 ch 未定义,但您可能希望在第一次调用 strcmp 时使用 r.c_str(),在第二种情况下使用 r.c_str() 而不是 ch。

,

问题出在下面一行:

ch = r;

变量 ch 的类型为 char[100],变量 r 的类型为 std::string。这些类型不兼容,您不能将 std::string 分配给 char 数组。

您可能想改写以下内容:

strcpy( ch,r.c_str() );

然而,完全不使用 C 风格的字符串会更简单,而是在任何地方使用 std::string,如下所示:

string s1=asctime(localtime(&timetoday));;
string r=s1.substr(4,6);
if( r == "Dec 20" )
{
    cout<<"made my first try for creating this program";
}
else if( r == "Dec 21" )
{
    cout<<"Shortest day of the year";
}

您程序中的另一个错误似乎是您调用了 strcmp 两次,一次是这样的:

strcmp(r,"Dec 20")

曾经像这样:

strcmp(ch,"Dec 21")

第二个是正确的,但第一个是错误的,因为您必须传递 C 风格的字符串(char 数组),而不是 C++ 风格的字符串(std::string)。您可能打算写 ch 而不是 r。或者,如果您想继续使用 r,您可以改写 r.c_str(),这将返回一个 C 风格的字符串。但是,如上所述,最好的解决方案可能是在任何地方都使用 std::string 而根本不使用 strcmp,因为它仅适用于 C 样式的字符串。

,

strcmp 比较两个 cstrings(const char*),您传递的是 std::string。尝试类似``if(r == "Dec 20") ...```

,

ch = r 您正在将字符串与字符数组或 c with cpp 混合。您可以通过这种方式使用 std::copy,为什么不让您的生活更轻松

 std::copy(r.begin(),r.end(),ch);

快乐编码。