在C ++中的各种文件中包含更多次类

时间:2011-12-28 11:15:49

标签: c++ include declaration

我有4节课: Server.cpp Logger.cpp Util.cpp Crypto.cpp

类Server使用对象Util。 该程序工作正常,但现在我需要在Logger类中使用对象Util。 但是当我输入代码#include“Util.cpp”时,g ++给我一个错误,因为我无法再次调用该对象。 Eclipse告诉我类Util的“重新定义”和“以前的声明”。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:7)

您不应将源cpp文件包含在另一个cpp文件中。
这基本上违反了 One Definition Rule ,导致重新定义错误。

在您要创建其对象的任何类中包含具有Util类定义的头文件。

基本上,您的代码应该以这种方式组织(例外:模板化代码):

Util.h ----------->包含类Util的定义充当接口
Util.cpp ----------->包含类Util的实现充当实现

此处,只要您想在任何cpp文件中创建类Util的对象,就在该cpp文件中包含Util.h,以便编译器知道类Util的定义。

例如:
Server.cpp想要创建Util的对象,然后您的Server.cpp应包含Util.h

#include "Util.h"

另外,不要忘记将 Include guards 添加到您的头文件中。

如果另一个源/头文件使用Util仅限于创建指向Util的指针,那么您不需要包含头文件,只需要 {{ 3}} Util类。

答案 1 :(得分:1)

您应该只输入头文件,例如Util.h,而不是.cpp文件。另外,请确保使用包含警戒。如果编译器为多个定义提供错误,可能您错过了包含警戒。

答案 2 :(得分:0)

您在.h个文件(或.hpp)中声明您的类,并将实现放在`.cpp'文件中。

您只在其他.h / .hpp.h个文件中加入.hpp / .cpp个文件,您永远不会包含.cpp个文件。< / p>

确保每个头文件都有防范以防止多重包含,头文件.h / .hpp的第一行应为:

#pragma once