问题描述
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";
}
解决方法
代码不完整,即 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);
快乐编码。