0
#include <string.h>
using namespace std;
namespace charcount 
{
    int ShowPerCent();
    int PerCent();
    int Values(char letter);
    int analize(string var);
}

这段代码是我项目的“functions.h”的一部分。这说:

functions.h: 7:13: error: 'string' was not declared in this scope

我不明白为什么这么说。我尝试std::string并没有。有谁知道会发生什么?如果您需要更多其他信息,请询问。

4

2 回答 2

5

正确的标题是<string>. 将包含指令更改为:

#include <string>

C++ 标准库头文件.h.

这样做被认为是非常糟糕的做法using namespace std;,尤其是在头文件中。这会使用命名空间中的名称污染全局命名std空间,并将所述污染传播到包含它的任何文件。

于 2013-04-08T15:33:19.080 回答
2

在 C 中,

#include <string.h>

为您提供 C 字符串标题(strlen()strcmp())。

在 C++ 中,

#include <string.h>

已弃用,但为您提供相同的 C 字符串标头。鼓励您使用

#include <cstring>

相反,它为您提供相同的功能,但在std::名称空间(它们所属的位置)中。

如果你想要std::string面向对象的自动分配自动扩展 C++ 的优点,你必须:

#include <string>

并且请不要使用using namespace尤其是不要与std::. 这个想法是明确说明给定标识符来自哪个命名空间。

编辑:借调 sftrabbit,他打字比我快。虽然using namespace在您的 .cpp 文件中可能是可以原谅的,但在标头中这是一种死罪,因为包含您的标头可能会使完全有效的 C++ 代码突然无效,因为您更改了名称空间。

于 2013-04-08T15:38:56.280 回答