未知类型名称 'IRsend'

Unknown type name 'IRsend'

simplesample_mqtt.c 中的 C 文件中,它将 Arduino 连接到 Azure 物联网中心,我需要使用 IRsend 和 IrRemoteESP8266 库向 Azure 物联网中心发送红外信号。

  1. #include <IRremoteESP8266.h>
  2. #include <IRsend.h>
  3. IRsend irsend(10); // An IR LED is controlled by GPIO pin 4 (D2)

在我的 Ardunio 主文件中使用此代码时没有任何问题。但是当我在 C 文件 (implesample_mqtt.c) 中使用这些包含时,我从第 3 行收到此错误:"unknown type name 'IRsend'".

错误完整信息: Arduino:1.8.2 (Windows 10),开发板:"NodeMCU 0.9 (ESP-12 Module), 80 MHz, 115200, 4M (3M SPIFFS)"

在 sketch\simplesample_mqtt.c:29:0:

包含的文件中

C:\Program Files (x86)\Arduino\libraries\IRremoteESP8266\src/IRsend.h:29:1:错误:未知类型名称'class'

class IRsend {

C:\Program Files (x86)\Arduino\libraries\IRremoteESP8266\src/IRsend.h:29:14: 错误:应为 '=', ',', ';', 'asm' 或 'attribute' 在 '{' 标记

之前

class IRsend {

simplesample_mqtt.c:31: 错误: 未知类型名称 'IRsend'

IRsend irsend(10); // IR LED 由 GPIO 引脚 4 (D2)

控制

simplesample_mqtt.c:31: 错误:数字常量

前需要声明说明符或“...”

IRsend irsend(10); // IR LED 由 GPIO 引脚 4 (D2)

控制

退出状态 1 未知类型名称 'IRsend'

这份报告将包含更多信息 "Show verbose output during compilation" 在文件 -> 首选项中启用选项。

我解决了这个问题。这是因为主要的ardunio是c++而simplesample_mqtt.c是c代码,我们必须在c代码中使用c++代码:

我主要的ardunio文件你必须像这样声明函数:

extern "C" void TurnOn();
void TurnOn()
{
    digitalWrite(RELAY_SONOFF, HIGH);     
    digitalWrite(LED_SONOFF, HIGH);
}

并在 C 代码中使用此函数:

void TurnOn();
EXECUTE_COMMAND_RESULT TurnOn(ContosoAnemometer* device)
{
    (void)device;
    TurnOn();
    (void)printf("Turning fan on.\r\n");
    return EXECUTE_COMMAND_SUCCESS;
}