【问题标题】:identifier "string" undefined?标识符“字符串”未定义?
【发布时间】:2011-08-22 11:22:01
【问题描述】:

我收到错误:标识符“字符串”未定义。

但是,我将 string.h 包含在我的主文件中,一切正常。

代码:

#pragma once
#include <iostream>
#include <time.h>
#include <string.h>

class difficulty
{
private:
    int lives;
    string level;
public:
    difficulty(void);
    ~difficulty(void);

    void setLives(int newLives);
    int getLives();

    void setLevel(string newLevel);
    string getLevel();
};

有人可以向我解释为什么会这样吗?

【问题讨论】:

  • 作为旁注,您应该在代码中使用包含防护。如果您的编译器使用 #pragma once 指令做得更好,请将两者结合起来:#ifndef XXX_HEADER // #define XXX_HEADER // #pragma once // ... // #endif 其中顺序很重要(即包含包含 pragma 的保护)

标签: c++ string


【解决方案1】:

&lt;string.h&gt; 是旧的 C 标头。 C++提供了&lt;string&gt;,那么它应该被称为std::string

【讨论】:

  • 不要using namespace std,我已经出于某种原因拒绝了所有推荐该答案的答案。
【解决方案2】:

您想使用#include &lt;string&gt; 而不是string.h,然后string 类型位于std 命名空间中,因此您需要使用std::string 来引用它。

【讨论】:

    【解决方案3】:

    您忘记了您所指的命名空间。添加

    using namespace std;

    一直避免使用 std::string。

    【讨论】:

    • 对于那些投反对票的人:感谢您的建设性cmets:P
    • using namespace std; 真的很糟糕,尤其是在标题中。
    • 谢谢!你能解释一下为什么吗?
    • 我相信有一个关于它的问题。
    • Here(如果有人想知道)
    【解决方案4】:

    因为string 是在命名空间std 中定义的。将string 替换为std::string,或添加

    using std::string;
    

    在您的include 行下方。

    它可能在main.cpp 中有效,因为其他一些标头中有这个using 行(或类似的东西)。

    【讨论】:

      【解决方案5】:

      也许你想#include&lt;string&gt;,而不是&lt;string.h&gt;std::string 也需要命名空间限定,或显式 using 指令。

      【讨论】:

        【解决方案6】:

        您必须使用 std 命名空间。如果这段代码在 main.cpp 你应该写

        using namespace std;
        

        如果此声明在标头中,则不应包含命名空间而只需编写

        std::string level;
        

        【讨论】:

          【解决方案7】:

          #include &lt;string&gt; 将是正确的 c++ 包含,您还需要使用 std::string 或更一般地使用 using namespace std; 指定命名空间

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-12-25
            • 2020-03-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多