Arduino自定义类返回String报错:无法将String转换为int
自定义类返回String类型报错:无法将String转换为int
问题场景
在Arduino环境下自定义Lightbox类,尝试返回私有成员String audioTrack时编译报错,错误提示无法将String转换为int。
头文件(Lightbox.h)
#ifndef LIGHTBOX_H #define LIGHTBOX_H #include <Arduino.h> class Lightbox { private: String audioTrack; public: getTrack(); }; #endif
类实现文件(Lightbox.cpp)
#include "Lightbox.h" //#include "Adafruit_Soundboard.h" Lightbox::getTrack() { return audioTrack; }
错误信息
Lightbox.cpp: In member function 'int Lightbox::getTrack()': Lightbox.cpp:30:10: error: cannot convert 'String' to 'int' in return return audioTrack; ^~~~~~~~~~ exit status 1 Compilation error: cannot convert 'String' to 'int' in return
尝试过在函数内定义临时String变量返回,依旧报错;去掉return语句可正常编译。
错误原因
C++(Arduino基于C++)中,如果函数声明时未指定返回值类型,编译器会默认将其视为返回int类型。你的getTrack()函数无论在头文件声明还是实现时都未指定返回类型,因此编译器判定它应返回int,但实际返回的是String类型,类型不匹配导致报错。
正确解决方案
需在函数声明和实现时明确指定返回类型为String:
修正后的头文件(Lightbox.h)
#ifndef LIGHTBOX_H #define LIGHTBOX_H #include <Arduino.h> class Lightbox { private: String audioTrack; public: // 明确指定返回类型为String String getTrack(); }; #endif
修正后的类实现文件(Lightbox.cpp)
#include "Lightbox.h" //#include "Adafruit_Soundboard.h" // 同样指定返回类型为String String Lightbox::getTrack() { return audioTrack; }
这样编译器能识别函数返回类型为String,与实际返回的变量类型匹配,编译即可通过。
内容的提问来源于stack exchange,提问作者Matthew Cain
相关产品推荐
相关产品推荐

