有没有办法可以在一个类中包含一个文件,以便它可以使用它但不允许包括该类的任何东西进入范围以便能够使用它?为了简化,我假设我在一个名为IO的类中有iostream头,并且我使IO能够使用cout函数编写内容但不允许任何包含IO的内容能够在iostream头中使用任何内容。这不是我想要做的,但我需要弄清楚这一点,所以我不会“双重定义”事情。
答案 0 :(得分:3)
是的,您可以,只需将其包含在cpp
中,而不是h
。
// IO.h
// note the lack of #include <iostream>
class IO
{
// IO stuff...
void f();
};
然后在cpp
:
// IO.cpp
#include "IO.h"
#include <iostream>
IO::void f()
{
std::cout << "Hello world!" << '\n';
}
如果您将IO.h
包含在其他文件中但未包括<iostream>
,请查看compilation unit概念。
答案 1 :(得分:2)
该问题的常见解决方案是在单独的头/源文件对中声明IO。在标题中,您转发声明您将需要的类,并在源文件中包含您需要的标题。这样,标头的实际内容只能在源文件中访问。