You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将变量名传入C++枚举以获取对应枚举值?

问题解答

C++中枚举类型和字符串属于完全不同的类型,不存在直接的隐式转换,这就是你遇到cannot convert 'String' to 'getValue'编译错误的原因。你不能直接把String类型的变量赋值给枚举变量,必须手动建立字符串与枚举值的映射关系来实现需求。

下面提供两种可行的实现方案:

方案一:用映射表建立字符串与枚举的对应关系

这种方式适合枚举项较多的场景,维护起来更方便:

#include <map>
#include <string>

enum getValue 
{ 
    monday = 20, 
    tuesday = 30, 
    wednesday = 40, 
    thursday = 50, 
    friday = 60, 
    saturday = 70, 
    sunday = 80, 
    everyday = 90   
};

// 若为Arduino环境,可将std::string替换为Arduino自带的String类型
std::string settingValue(const std::string& settingName)
{
    // 静态映射表,仅初始化一次
    static const std::map<std::string, getValue> name_to_enum = {
        {"monday", monday},
        {"tuesday", tuesday},
        {"wednesday", wednesday},
        {"thursday", thursday},
        {"friday", friday},
        {"saturday", saturday},
        {"sunday", sunday},
        {"everyday", everyday}
    };

    auto iter = name_to_enum.find(settingName);
    if (iter != name_to_enum.end()) {
        // 将枚举值(整数)转换为字符串返回
        return std::to_string(iter->second);
    }
    // 处理未匹配到的无效输入
    return "invalid setting";
}

方案二:用条件判断逐个匹配

如果枚举项较少,用简单的if-else也能实现需求:

#include <string>

enum getValue 
{ 
    monday = 20, 
    tuesday = 30, 
    wednesday = 40, 
    thursday = 50, 
    friday = 60, 
    saturday = 70, 
    sunday = 80, 
    everyday = 90   
};

std::string settingValue(const std::string& settingName)
{
    getValue value;
    if (settingName == "monday") {
        value = monday;
    } else if (settingName == "tuesday") {
        value = tuesday;
    } else if (settingName == "wednesday") {
        value = wednesday;
    } else if (settingName == "thursday") {
        value = thursday;
    } else if (settingName == "friday") {
        value = friday;
    } else if (settingName == "saturday") {
        value = saturday;
    } else if (settingName == "sunday") {
        value = sunday;
    } else if (settingName == "everyday") {
        value = everyday;
    } else {
        return "invalid setting";
    }
    return std::to_string(value);
}

额外说明

  • 若你是在Arduino环境中开发,只需把代码中的std::string替换为Arduino的String类型,std::to_string(value)替换为String(value)即可。
  • 枚举类型本质是整数,你的函数返回值是String类型,所以必须把枚举值转换为字符串后再返回,否则会出现类型不匹配的错误。

内容的提问来源于stack exchange,提问作者Bbb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 01:08:18