2

我有一个基类Base
派生自它的两个类:DerivedADerivedB. 在我包含的两个类的标题中Base.h
然后,在source.cpp我定义 my 的地方main,如果我只包含DerivedA.h,它可以正常工作。如果我只包括DerivedB.h它也可以正常工作。问题是我不能同时包含两者。
每当我同时包含两者时,编译器都会生成一堆错误,例如

  • '.debit' 的左边必须有类/结构/联合
  • “getBalance”:不是“CheckingAccount”的成员

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

4

2 回答 2

7

如果问题只是头文件而不是致命钻石的情况,您可以只#pragma once在头文件中使用,这将确保它在构建过程中只链接一次。

或者,你可以将你的头文件包装成这样:

#ifndef HEADER_H_
#define HEADER_H_

// The content of the header file goes here...

#endif

通过使用预处理器#ifXXXX语句,您可以告诉编译器仅在宏尚未预定义时才包含该文件。

于 2013-10-10T03:38:22.160 回答
-1

当您从同一个基类的两个类继承时,您应该在进行继承时尝试使用关键字“virtual”。我相信它可以帮助您解决虚拟表中的困惑。查找虚拟继承以获取示例。

于 2013-10-10T03:52:43.423 回答