包含在头文件中
Include in header files
class A{
private:
std::string id;
public:
void f();
};
给出编译时错误。但是,如果我include <string>
顶部,它可以正确编译。不过,我不想在标题中使用包含语句。我该怎么做?
在其他标头中包含标头是完全必要的。尽可能减少它是明智的,但从根本上说,如果你的类依赖于std::string
,那么你别无选择,只能在标题中#include <string>
。此外,依赖任何和/或所有标准类绝对没有错 - 毕竟,它们在任何实现中都必须提供。using namespace std;
不高兴。
,您必须包含<string>
才能使用std::string
。
唯一可以避免 #including 标头的时刻是仅在标头中使用对象的引用或指针。在这种情况下,您可以使用前向声明。但是由于 std::string 是一个 typedef,你不能转发声明它,你必须包含它。
我相信您正在尝试遵循建议以尽可能少地#include
,但在这种情况下您不能遵循它。
std::string 在 std 命名空间的 <string>
头文件中定义。你必须包括它。
在包含其他头文件之前,您可以通过在实现文件中包含必要的文件来确保满足所有依赖项,即在包含您自己的头文件之前#include <string>
确保它出现在实现文件(.cpp(的第一行。
这并不完全是最佳做法。所有头文件都应满足自己的依赖项,因此头文件的用户无需关心依赖项。至少这是我的拙见。
听说过在标头中使用using namespace std;
是不明智的,这是真的,因为包含该标头的任何内容都卡在全局命名空间中的所有内容中。 包括您需要的头文件是完全可以接受的。
您无法绕过它。
即使您的类定义如下所示:
class A {
private:
std::string* id;
public:
void f();
};
那么你仍然无能为力,因为向前宣布std::basic_string<char, etc>
是一种痛苦。我什至不打算演示。
幸运的是,尽管标头中的using namespace std
绝对是禁忌,但您通常可以在自己的标头中#include
标准标头,而不必担心。
可能一些疯狂的extern
声明会有所帮助,但这不是一种方法。为什么不想包含在头文件中?
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- C++文件包含多行
- CMake 如何强制third_party库将项目文件包含在当前项目源目录中?
- 是否可以将要"ShellExecute"的文件包含在 dll 中?如果是这样,"ShellExecute"中的文件位置应该是什么?
- C++ 逐行从文件(包含空格)读取数据
- 在 C++ 中,.h 文件包含文件但不起作用
- 生成的资源文件包含奇怪的包含文件
- 可变参数类的文件包含问题
- 为什么文件命令声明可执行文件包含"debug_info"
- 可以将标头文件包含在多个源文件中,而无需重复保护
- 为什么将.HPP文件包含在.h文件中
- Qt C++:将所有库文件包含在项目文件夹中
- 有条件地将文件包含在C++标头中
- 将多个原型文件包含在一个项目中会导致protobuf_AssignDescriptorsOnce()已经有一个主体
- 有没有办法将文件包含在C++中的所有项目文件中
- 将外部.asm文件包含到C++代码中
- 什么是"pch.h",为什么需要将其作为第一个头文件包含在内?
- 该头文件包含DirectX 12中的ThrowIfFailed()
- QT C :函数的多个定义当Header文件包含在MainWindow.h中时
- QT创建者错误地处理标头文件包含来自Directory