嵌入式

时间:2015-04-24 09:22:39

标签: c++ class dictionary types embedded

我正在开发嵌入式应用程序,因此需要精益求精。我正在使用地图来存储参数。这些将是int或float数据类型。我哪里出错了?

#include <string.h>

class parameter_types {
    typedef int parameter_int;
    typedef float parameter_float;
};

std::map<std::string, parameter_types*> mymap;

int map_test(char* return_string) {
  mymap["Circle"] = (int)1;
  mymap["Wibble"] = (float)0.4567;
  mymap["Triangle"] = 3.3;
  mymap["Square"] = 4;

  return 1;
}

我收到以下编译器错误:    错误:无法将类型为“int”的值分配给“parameter_types *”类型的实体

我确定这是一个基本错误,但我没有看到它。

谢谢!

2 个答案:

答案 0 :(得分:0)

你在这里做了语法错误。

理论上,您需要手动设置类型并将其存储为属性:

class parameter_type
{
    int parameter_int;
    float parameter_float;
}

mymap["Circle"] = new parameter_type;
mymap["Circle"]->parameter_int = 10;

但是,我认为这不是你想做的事。

然后,如果您需要存储变体类型,您有多种选择:

  • 您可以使用lib来执行所有类型的工作,如Boost(Boost.Variant或Boost.Any)
  • 您可以使用模板正确实现Variant。

关于第二个问题,我建议你查看这个答案:Implementing a "variant" class解决了你的问题。

答案 1 :(得分:0)

好吧,您告诉编译器mymap是将std::string个键映射到parameter_types值的映射。但是mymap["Circle"] = (int)1;告诉编译器在int键下放置std::string值,当然它不能,因为值类型是parameter_types。您必须将int放在parameter_types的实例中(此时此时没有任何成员字段,因此您必须添加它们)然后它才能正常工作。

作为一种可能的解决方案,您可以在类中使用union,如下所示:

class parameter_types {
    typedef int parameter_int;
    typedef float parameter_float;
    union value
    {
        parameter_int int_value;
        parameter_float float_value;
    };
};

parameter_types parameter;
parameter.value.int_value = 3;