是否有任何选项在头文件中使用std而不使用任何#include语句?我在头文件中有一个类如下;
class Sequence{ private: std::string sequence; unsigned length; public: /* Constructors */ Sequence (void); Sequence (std::string, unsigned); Sequence (const Sequence &); /* Destructor Definition */ ~Sequence(){} /* Overloaded Assignment */ Sequence & operator = (const Sequence &seq) { sequence = seq.sequence; length = seq.length; return *this; } /* Setter and Getter Functions */ void setSequence(std::string); void setLength(unsigned); std::string getSequence(void); int getLength(void); };
如果不包含iostream,则无法正确编译.但是,我在相关问题中阅读了一些注释,其中我们不应在头文件中包含库和另一个头文件.所以?
如果在您自己的标题A中,您依赖于类型定义或来自另一个标题B的函数声明(无论是标准标题还是其他标题),那么您必须在标题A中包含标题B.
一般来说,你无法避免它.在某些情况下,您可能只依赖于类型声明,在这种情况下,您可以通过使用前向声明来避免包含该定义.但是,这不适用于标准库中的类型,因为它们位于名称空间中,您可能不会声明任何内容.
如果不包含iostream,则无法正确编译
实际上,你的班级定义取决于
.它可能
包含
但不能依赖于此.
相反,包括,因为您使用在那里定义的类型(std::string
).
我们不应该在头文件中包含库和另一个头文件.
您必须包含所依赖的所有标头,无论它们是否来自库.包括库头和其他头文件没有任何问题.