我有4节课: Server.cpp Logger.cpp Util.cpp Crypto.cpp
类Server使用对象Util。 该程序工作正常,但现在我需要在Logger类中使用对象Util。 但是当我输入代码#include“Util.cpp”时,g ++给我一个错误,因为我无法再次调用该对象。 Eclipse告诉我类Util的“重新定义”和“以前的声明”。
我该如何解决这个问题?
答案 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