我有一个基类 Base
。
从它派生的两个类:DerivedA
和 DerivedB
。在这两个类的 header 中,我都包含了 Base.h
。
然后,在我定义 main
的 source.cpp
中,如果我只包含 DerivedA.h
,它工作正常。如果我只包含 DerivedB.h
,它也可以正常工作。问题是我不能同时包含两者。
每当我同时包含两者时,编译器都会生成一堆错误,例如
- '.debit' 的左边必须有类/结构/union
- 'getBalance':不是'CheckingAccount'的成员
我想问题是当我包含两个 header 时,Base.h
被包含了两次。我应该如何包含这些 header ?
最佳答案
如果问题只是头文件而不是 deadly diamond of death 的情况,您可以在头文件中使用 #pragma once
,这将确保它在构建过程中只链接一次。
或者,您可以将头文件包装成这样:
#ifndef HEADER_H_
#define HEADER_H_
// The content of the header file goes here...
#endif
通过使用预处理器 #ifXXXX
语句,您可以告诉编译器仅在宏尚未预定义时才包含该文件。
关于C++ 包含两个派生自同一基类的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19286614/