c++ - 错误:重新定义“类...”继承
问题描述
我浏览了许多类似的问题,但找不到适合我的问题的答案。我尝试创建一个抽象类并将其扩展为不同的.cpp
文件。如果我尝试编译,我会收到此错误。
In file included from src/main.cpp:6:0:
src/MQBIOTExecutor.cpp:4:7: error: redefinition of 'class MQBIOTExecutor'
class MQBIOTExecutor
^
In file included from src/MQBIOT.cpp:3:0,
from src/main.cpp:5:
src/MQBIOTExecutor.cpp:4:7: error: previous definition of 'class MQBIOTExecutor'
class MQBIOTExecutor
^
In file included from src/MyExecutor.cpp:3:0,
from src/main.cpp:7:
src/MQBIOTExecutor.cpp:4:7: error: redefinition of 'class MQBIOTExecutor'
class MQBIOTExecutor
^
In file included from src/MQBIOT.cpp:3:0,
from src/main.cpp:5:
src/MQBIOTExecutor.cpp:4:7: error: previous definition of 'class MQBIOTExecutor'
class MQBIOTExecutor
^
我已经尝试过很多事情,例如将抽象类放入头文件或使所有函数纯虚拟而不是纯虚拟等。
我的MQBIOTExecutor.cpp
#include <Arduino.h>
#include <ArduinoJson.h>
class MQBIOTExecutor
{
public:
virtual void getState() = 0;
virtual void getCommands() = 0;
virtual void executeCommand(JsonDocument jdoc) = 0;
virtual void getConfig() = 0;
virtual void setConfig(JsonDocument jdoc) = 0;
virtual void getSensor() = 0;
virtual void extend(String topic, String payload, JsonDocument payloadJsonDoc) = 0;
};
我的MyExecutor.cpp
#include <Arduino.h>
#include <ArduinoJson.h>
#include <MQBIOTExecutor.cpp>
class MyExecutor : public MQBIOTExecutor
{
public:
virtual void getState()
{
}
virtual void getCommands()
{
}
virtual void executeCommand(JsonDocument jdoc)
{
}
virtual void getConfig()
{
}
virtual void setConfig(JsonDocument jdoc)
{
}
virtual void getSensor()
{
}
virtual void extend(String topic, String payload, JsonDocument payloadJsonDoc)
{
}
};
其余的无关紧要。如果我删除继承,整个事情都会编译。
解决方案
您不使用任何包含警卫:
#ifndef MQBIOTEXECUTER_H //only define this class the first time the pre-processor sees this definition
#define MQBIOTEXECUTER_H
#include <Arduino.h>
#include <ArduinoJson.h>
class MQBIOTExecutor
{
public:
virtual void getState() = 0;
virtual void getCommands() = 0;
virtual void executeCommand(JsonDocument jdoc) = 0;
virtual void getConfig() = 0;
virtual void setConfig(JsonDocument jdoc) = 0;
virtual void getSensor() = 0;
virtual void extend(String topic, String payload, JsonDocument payloadJsonDoc) = 0;
};
#endif
所以这个类在你每次包含它时都会被编译,因此会被重新定义。
推荐阅读
- python-3.x - 在 Python-Selenium 中自动下载文件时,如何以编程方式重命名文件?
- javascript - 将 window.location 转换为具有变量链接的 window.open
- oracle - 为什么这个 PL/SQL 触发器不显示任何结果?
- r - r中关于mu和polygon的问题
- php - PHP 随机/百分比机会执行选项之一
- python - 如何在其他类中打包 tkiner 对象?
- android - (DAGGER-ANDROID) 不能在 Espresso 测试中使用 @Inject 并且不能使用 mockWebServer
- android - 前台服务中的位置更新
- scala - 使用 Optional 字段上的错误模式解析 JSON 时引发异常
- python - 我如何从日期时间中获得新的时间