【发布时间】:2023-03-28 19:32:01
【问题描述】:
我正在开发一个微处理器 (Arduino) 项目。我的库 Foo 继承自现有库 Basic。后来我将Basic的功能扩展为另一个类Advanced。然而,Advanced 使硬件更加难以扩展,使得其中一个已经制作的演示无法使用。
我的想法如下:
class Foo:
#ifndef USE_BASIC
public Advanced
#else
public Basic
#endif
{
...
}
并将#define USE_BASIC 放入我的演示代码中:
#define USE_BASIC
#include <Foo.h>
但是 Foo 不是从 Basic 继承的。我在这里做错了吗?或者是否有其他方法可以解决这个问题?
【问题讨论】:
-
您必须在包含
Foo.h的每个翻译单元(.cpp + 包含的标头)中,在#include <Foo.h>指令之前定义USE_BASIC。考虑使用编译器开关(在每个翻译单元中自动声明USE_BASIC)或将#define放在标题中。 -
@Named 我不同意。标头没什么特别的,OP 显示了在包含标头之前定义
USE_BASIC的示例。编译器在 cpp 上运行,因此预处理器首先看到定义 然后 包括标题(在 OP 的示例中)。 -
我看不懂-1。
标签: c++ inheritance arduino