【问题标题】:C++ "std::string has not been declared" errorC++“std::string 尚未声明”错误
【发布时间】:2013-06-11 08:55:29
【问题描述】:

我一直在网站上寻找答案,但找不到任何对我有帮助的答案。

当我尝试(如建议的那样)添加这些行时,我有一个使用字符串的代码:

using namespace std;
using std::string;
#include <string>

我尝试单独使用它们中的每一个,然后将它们一起尝试。最好的情况是所有字符串错误都消失了,但我在“使用 std::string”这一行出现了另一个奇怪的错误,错误是:std::string 尚未声明。 有任何想法吗?谢谢大家。

【问题讨论】:

  • 你为什么投反对票?这是一个初学者的问题,但却是一个有效的问题。
  • @Roee 我认为它对任何人都没有用,任何对该语言的基本处理都将涵盖这一点。我现在应该链接到stackoverflow.com/questions/388242/…
  • 您需要阅读good book
  • 他们在哪里建议这些?有网址吗?

标签: c++ string


【解决方案1】:

include 应该在 using 之前

#include <string>
using namespace std;
//using std::string; <-- Needless

【讨论】:

  • 为什么要鼓励别人说using namsepace std
  • @juanchopanza (a) 因为这是一种有效的受支持的可能性。 (b) 当我知道自己在做什么并且在过去 8 年中从未给我造成任何问题时,我会使用它...
  • 每天都有一些 SO 帖子,其中有人遇到来自 using namespace std 的问题。
  • @wannabeprogrammer 您可以在需要时将字符串称为std::string,或者在有限范围内使用using std::string,例如在函数或类中。
  • 如果我能看到其中一些事故是由蒙眼驾驶的人造成的,我至少会确保我不建议学习者蒙眼驾驶。
【解决方案2】:

#include &lt;string&gt;放在第一位。

避免在标头中使用using 语句,因为您可能会将各种内容引入许多编译单元。 using std::string 在标头中可能是可以接受的,但 using namespace std 肯定不是,因为它会在所有编译单元中造成如此多的命名空间污染。 std 命名空间在不断扩展(查看 C++ 中的所有新内容),因此您不希望在升级编译器时修复大量错误。

【讨论】:

  • 我不认为 using std::string 在标头中是可以接受的,除非它在有限的范围内。
  • @RoeeGavirel 我知道。但是这个答案明确谈到了标题。
  • @juanchopanza;我同意你的看法(这是我执行的标准之一)。
  • 一些可能有用的术语:using namespace std; 是一个 using 指令。 using std::string; 是 using 声明。
  • @juanchopanza:我将它与 vector 和许多其他 using 声明一起使用在强制包含所有项目的公共标头中。以最好的结果。在异国情调的东西上使用 std:: 是可以容忍的,否则就是完全的噪音。您是否允许将名称“字符串”用于其他目的?
猜你喜欢
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 2011-02-22
相关资源
最近更新 更多