标识符“字符串”未定义?

Posted

技术标签:

【中文标题】标识符“字符串”未定义?【英文标题】: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 的保护) 【参考方案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; 指定命名空间

【讨论】:

以上是关于标识符“字符串”未定义?的主要内容,如果未能解决你的问题,请参考以下文章

摆脱 Julia 的“警告:为未更改的字符串重新定义常量”?

VS2013 明明定义了,死活说 未定义标识符

为啥VC++编译器提示标识符未定义?

OpenCV2升级到OpenCV3遇到“未定义的标识符”

未定义标识符/未声明

Swift NSKeyedArchiver toFile:未解析的标识符