[英]Why does removing using namespace std cause errors in my project?
我在C ++中包含头文件时遇到问题。 据我所知,在头文件中using namespace std
并不是一个好的设计,但是当我尝试删除它时出现了一些错误。 这是头文件中的代码:
#include <iostream>
#include <string>
//using namespace std;
class Messages
{
public:
Messages(string sender, string recipient,int time);
void append();
string to_string();
private:
int time;
string sender;
string recipient;
string text;
};
我确实包含了<string>
。 但是,如果我不使用namespace std,那么我的所有字符串都会显示错误。 我不想在头文件中添加using namespace std
,因为它是一个糟糕的设计。 那么我该如何解决呢?
提前致谢。
只需在任何地方写std::string
。
#include <iostream>
#include <string>
//using namespace std;
class Messages
{
public:
Messages(std::string sender, std::string recipient,int time);
void append();
std::string to_string();
private:
int time;
std::string sender;
std::string recipient;
std::string text;
};
正如经验法则:每当(甚至在.cpp文件中)使用标准库中的任何数据类型或算法时,只需在其前面加上std::
。 它足够短,可以输入,它将为您节省痛苦的世界。
高级用户在函数范围使用声明时有一些原因,例如,当您想要从标准库重载函数(例如swap
)以使用您自己的数据类型(在他们自己的命名空间内)时。 请参阅此问答 ,了解其工作原理。
类string
在名称空间 std
声明。 您有三种方法可以处理位于不同命名空间内的类:
<namespace>::<class>
<class>
任何引用实际上意味着1.上面: using <namespace>::<class>;
。 <class>
引用也应该在另一个命名空间中查找: using namespace <namespace>;
这些按表现力的降序排序。 虽然在任何地方编写完全清楚,但如果您不熟悉所使用的(可能的多个)命名空间,则可能需要对头部进行查找和刮擦。
这些也按照打字的降序排序,这就是为什么有些人(尤其是教科书)选择3。
但是,您永远不应该在头文件中using ...
,因为您不仅要弄乱标题中的命名空间解析,还要包括标题中的每个人的命名空间解析。 这会导致命名空间冲突,奇怪的错误取决于包含的顺序和许多其他令人头疼的问题。 只是不要。
一般来说,虽然在实施文件中有选项1和2.有一些专业和参与,但选项3对于以后必须使用您的源的任何人来说都是冒犯性的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.