在c++的不同文件中多次包含一个类

Include more times a class in various files in C++

本文关键字:包含一 文件 c++      更新时间:2023-10-16

我有4个类:Server.cpp Logger.cpp Util.cpp Crypto.cpp

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

我该如何解决这个问题?

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

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

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

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

从这里开始,每当您想在任何cpp文件中创建Util类的对象时,您都要在该cpp文件中包含Util.h,以便编译器知道Util类的定义。


为例:Server.cpp想要创建一个Util的对象,那么你的Server.cpp应该包括Util.h作为:

#include "Util.h"
另外,不要忘记在头文件中添加Include守卫

如果Util在另一个源/头文件中的使用仅限于创建一个指向Util的指针,那么你不需要包含头文件,你只需要向前声明 Util

您应该只输入头文件,例如Util.h,而不是.cpp文件。另外,确保你使用了include守卫。如果编译器对多个定义给出错误,可能是您错过了include保护符。

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

在其他.h/.hpp.cpp文件中只包含.h/.hpp文件,不包含.cpp文件。

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

#pragma once