我正在开发嵌入式应用程序,因此需要精益求精。我正在使用地图来存储参数。这些将是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 *”类型的实体
我确定这是一个基本错误,但我没有看到它。
谢谢!
答案 0 :(得分:0)
你在这里做了语法错误。
理论上,您需要手动设置类型并将其存储为属性:
class parameter_type
{
int parameter_int;
float parameter_float;
}
mymap["Circle"] = new parameter_type;
mymap["Circle"]->parameter_int = 10;
但是,我认为这不是你想做的事。
然后,如果您需要存储变体类型,您有多种选择:
关于第二个问题,我建议你查看这个答案: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;