标识符“字符串”未定义?
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】:
<string.h>
是旧的 C 标头。 C++提供了<string>
,那么它应该被称为std::string
。
【讨论】:
不要using namespace std
,我已经出于某种原因拒绝了所有推荐该答案的答案。【参考方案2】:
您想使用#include <string>
而不是string.h
,然后string
类型位于std
命名空间中,因此您需要使用std::string
来引用它。
【讨论】:
【参考方案3】:您忘记了您所指的命名空间。添加
using namespace std;
一直避免使用 std::string。
【讨论】:
对于那些投反对票的人:感谢您的建设性cmets:Pusing namespace std;
真的很糟糕,尤其是在标题中。
谢谢!你能解释一下为什么吗?
我相信有一个关于它的问题。
Here(如果有人想知道)【参考方案4】:
因为string
是在命名空间std
中定义的。将string
替换为std::string
,或添加
using std::string;
在您的include
行下方。
它可能在main.cpp
中有效,因为其他一些标头中有这个using
行(或类似的东西)。
【讨论】:
【参考方案5】:也许你想#include<string>
,而不是<string.h>
。 std::string
也需要命名空间限定,或显式 using
指令。
【讨论】:
【参考方案6】:您必须使用 std 命名空间。如果这段代码在 main.cpp 你应该写
using namespace std;
如果此声明在标头中,则不应包含命名空间而只需编写
std::string level;
【讨论】:
【参考方案7】:#include <string>
将是正确的 c++ 包含,您还需要使用 std::string
或更一般地使用 using namespace std;
指定命名空间
【讨论】:
以上是关于标识符“字符串”未定义?的主要内容,如果未能解决你的问题,请参考以下文章