可能重复:
在实现中重新包含头文件 我想知道的是,在头文件中不使用
如果我有
我真的需要在两个文件中都使用
编辑,关于我的问题还有一些背景信息。 如果我在头文件中使用某些类(作为变量或方法参数),我会在头文件中进行前向声明,并仅在源文件中包含头文件本身。但这对于大多数STL库来说是行不通的,因为你无法前向声明类模板?
在实现中重新包含头文件 我想知道的是,在头文件中不使用
using namespace xxx
以避免污染全局命名空间,这是常见做法。
那么对于#include
呢?如果我有
foo.h
和foo.cpp
。://Foo.h
#ifndef FOO_H_
#define FOO_H_
#include <string>
class Foo
{
public:
Foo(std::string * a, std::string * b);
virtual ~Foo();
};
#endif /* FOO_H_ */
//Foo.cpp
#include <string>
#include <Foo.h>
Foo::Foo(std::string * a, std::string * b)
{
// TODO Auto-generated constructor stub
}
Foo::~Foo()
{
// TODO Auto-generated destructor stub
}
我真的需要在两个文件中都使用
#include <string>
吗?只在.h或.cpp文件中包含它是否就足够了?(我知道两者都可以工作,但哪种更可取?)编辑,关于我的问题还有一些背景信息。 如果我在头文件中使用某些类(作为变量或方法参数),我会在头文件中进行前向声明,并仅在源文件中包含头文件本身。但这对于大多数STL库来说是行不通的,因为你无法前向声明类模板?
#include
。这样做可以极大地减少编译时间。 - Chadnamespace std { template <typename, typename, typename> class basic_string; typedef basic_string<char, std::char_traits<char>, std::allocator<char> > string; }
。(我甚至不确定这是否正确) - Alexandre C.std
或命名空间中添加声明或定义都是未定义的。” - Adam Rosenfield