在c++的不同文件中多次包含一个类
Include more times a class in various files in C++
我有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
- 使用mongocxx驱动程序时包含头文件问题
- 如何在h文件中包含.o对象文件
- 包含模板文件的递归会导致编译失败
- 在C++中包含原型文件的正确方法是什么?
- 包含在.cpp文件中包含在 .h 文件时包含
- 如何为包含头文件的目标编写生成文件?
- 使用提升元解析字符串解析包含的文件
- 在头文件上包含 cpp 文件是否有缺点?
- 如何在 CMakeLists.txt Qt Creator 中包含头文件?
- VS:在构建/exe中包含资源文件
- 无法使包含.hpp文件与其中的2个文件一起使用
- 当包含头文件的文件不在根项目文件夹中时,如何包含它
- 在生成文件先决条件中包含头文件的原因
- 在工厂或C++类中包含数据库 .h 文件
- My Project的属性配置正确,但Visual Studio仍然无法打开包含头文件
- 在 PostgreSQL C 扩展中包含头文件
- 是否可以在C++中以间接方式包含头文件
- 是否需要包含头文件?
- 为什么我可以在多个包含const int的cpp文件中包含一个头文件,而不会出现编译器错误
- 头文件在整个程序中仅包含一次