【问题标题】:C++ Using strcmp() in Class on Private Member DataC++ 在私有成员数据的类中使用 strcmp()
【发布时间】:2014-03-12 15:45:38
【问题描述】:

我正在为班级做作业,但在编译此代码时遇到问题。我在主 .cpp 文件和类 .cpp 文件中都使用了#include <string>。错误是“‘strcmp’不是‘std’的成员”,但无论我使用 std::strcmp() 还是 strcmp(),我都能得到它。

对我做错了什么有什么想法吗?

double temporary::manipulate()
{
    if(!std::strcmp(description, "rectangle"))
    {
    cout << "Strings compare the same." << endl;
        return first * second;
    }
    return -1;
}

【问题讨论】:

    标签: c++ class private member strcmp


    【解决方案1】:

    试试

    #include <cstring>
    

    ...

        if(!std::strcmp(description.c_str(), "rectangle"))
    

    【讨论】:

      【解决方案2】:

      您需要分别为strcmpstd::strcmp 添加&lt;string.h&gt;&lt;cstring&gt;&lt;string&gt;std:string 和其他相关功能所需的 C++ 标准库。

      请注意,std::strcmp 需要两个 const char*,而不是 std::string。如果descriptionstd::string,则可以使用c_str() 方法获取指向底层数据的指针:

      if(!std::strcmp(description.c_str(), "rectangle"))
      

      或者只使用比较运算符。这是更惯用的解决方案:

      if(description == "rectangle")
      

      【讨论】:

      • @DavidPetersonH​​arvey 查看我的编辑。寻求惯用的解决方案!
      • 对不起,冗余,试图找出在哪里添加 cmets 并打错了地方。但是,这是可喜的进步,但现在我收到错误:无法将参数 '1' 的参数 '1' 转换为 'std::string {aka std::basic_string}' to 'const char*' to 'int strcmp(const char*, const char*)' 欢迎任何进一步的想法!
      • 谢谢!我把事情复杂化了。非常尊重!
      【解决方案3】:

      标准 C 函数,包括 C++ 中的 strcmp,在标头 &lt;cstring&gt; 中声明。标题&lt;string&gt; 定义标准类std::basic_string。 所以你需要指令

      #include <cstring>
      

      【讨论】:

        【解决方案4】:

        一旦你#include &lt;cstring&gt;,这个功能就可以使用了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-06-18
          • 1970-01-01
          • 2019-12-29
          • 2010-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多