【问题标题】:I have some error can anyone help me in this我有一些错误任何人都可以帮助我
【发布时间】:2020-12-21 06:24:45
【问题描述】:
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 = r;这一行,看起来你正在混合C和C++。 r 是 string 和 ch 是 char
  • strings 有自己的内置比较运算符。在可能的情况下,全力以赴 string 并使用 strings 设施。
  • 请不要添加无关的语言标签。这个问题是关于 C++ 和 C++ 代码的,所以不要标记 C。
  • 至于您的问题,请联系some good books 并参加一些课程正确地学习C++。
  • 简单示例:ideone.com/WSSLGF

标签: c++ compiler-errors codeblocks


【解决方案1】:

问题出在下面一行:

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 风格的字符串。

【讨论】:

  • 谢谢先生/女士您解决了我的第一个错误。谢谢你,我纠正了我的错误。
  • @RBEditz:如果其中一个答案解决了您的问题,那么请考虑接受其中一个答案。有关更多信息,请参阅此官方帮助页面:What should I do when someone answers my question?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 谢谢先生/女士您解决了我的第二个错误。谢谢你,我纠正了我的错误。
    【解决方案4】:

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

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

    快乐编码。

    【讨论】:

      【解决方案5】:

      变量ch 是一种char[100],变量r 是一种std::string。这些排序不兼容,您不能将 std::string 分配给 char 数组

      【讨论】:

      • 这个答案对已经发布的答案没有任何新内容。
      猜你喜欢
      • 2015-03-15
      • 1970-01-01
      • 2012-11-30
      • 1970-01-01
      • 2022-11-23
      • 2020-08-17
      • 2018-11-03
      • 1970-01-01
      • 2018-06-03
      相关资源
      最近更新 更多