C ++包含两个派生自同一基类的类

时间:2013-10-10 03:34:26

标签: c++ inheritance header

我有一个基础班Base 从中派生出两个类:DerivedADerivedB。在这两个类的标题中,我包括Base.h 然后,在我定义source.cpp的{​​{1}}中,如果我只包含main,则可以正常使用。如果我只包括DerivedA.h它也可以。问题是我不能同时包括。
每当我包含两者时,编译器都会生成一堆错误,如

    '.debit'左边的
  • 必须有class / struct / union
  • 'getBalance':不是'CheckingAccount'的成员

我想问题是当我同时包含两个标题时,DerivedB.h被包含两次。我该如何包含这些标题?

2 个答案:

答案 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”。它可以帮助您解决我认为的虚拟表中的混乱。查找虚拟继承以获取示例。