我有一个基础班Base
从中派生出两个类:DerivedA
和DerivedB
。在这两个类的标题中,我包括Base.h
然后,在我定义source.cpp
的{{1}}中,如果我只包含main
,则可以正常使用。如果我只包括DerivedA.h
它也可以。问题是我不能同时包括。
每当我包含两者时,编译器都会生成一堆错误,如
我想问题是当我同时包含两个标题时,DerivedB.h
被包含两次。我该如何包含这些标题?
答案 0 :(得分:7)
如果问题只是标题文件,而不是deadly diamond of death的情况,您可以在标题文件中使用#pragma once
,这样可以确保它只会在构建过程。
或者,您可以将头文件包装成以下内容:
#ifndef HEADER_H_
#define HEADER_H_
// The content of the header file goes here...
#endif
通过使用预处理器#ifXXXX
语句,如果宏尚未预定义,您可以告诉编译器仅包含该文件。
答案 1 :(得分:-1)
当您从两个来自同一基类的类继承时,您应该尝试在执行继承时使用关键字“virtual”。它可以帮助您解决我认为的虚拟表中的混乱。查找虚拟继承以获取示例。