有点像菜鸟问题。在一个名为'cell'的类中,我有一个枚举'Example'说
typedef enum Example
{
E1=0,
E2,
E3,
E4
};
Example inputValueE;
此外,我在类中有一个函数,如下所示
void evolveE(Example type_);
在课外,我尝试定义几种类型的函数,如下所示
void cell::evolveE(Example type_ = E1){****some stuff****;};
void cell::evolveE(Example type_ = E2){****some diff stuff****;}; ***etc***
我已经玩过这些但没有运气。问题是我不允许重新定义相同的功能。我打算使用switch-case类型的命令,它始终是备份的,虽然我很确定有更优雅的方法来做到这一点
非常感谢任何帮助。
答案 0 :(得分:1)
该语法设置默认参数。它与调用者传递的实际参数不匹配。使用switch
/ case
。
如果你想要花哨,你也可以使用函数指针的数组(或映射)。
答案 1 :(得分:1)
对于本声明:
void cell::evolveE(Example type_ = E1);
两点:
evolveE
参数的默认值
没有让它采取enum
其中一个解决方案:
您可以选择将每个值设为独立类型:
enum E1 {};
enum E2 {};
enum E3 {};
答案 2 :(得分:0)
当重载一个函数(在一个类中提供多个具有相同名称的函数)时,你需要为每个函数提供一组不同的参数 types ,如下所示:
void cell::evolveE(Example type_){****some stuff****;}
void cell::evolveE(OtherExample size_){****some diff stuff****;}
请注意,这里,一个函数采用类型为Example
的参数,另一个函数采用类型为OtherExample
的参数。虽然您在尝试重载的函数中提供了不同的默认值,但两个函数都使用相同的参数 type ,因此编译器无法区分它们之间的区别。
你可以使用一个开关,虽然我更喜欢if / else,因为它不太容易出错。
如果Example
枚举确实是您的类的类型,那么您可以使用多态。这是OOP的一个非常优雅的功能。那么你可以这样:
class cell
{
...
virtual void evolveE() = 0;
};
class E1cell : public cell
{
...
void evolveE()
{
// some stuff
}
};
class E2cell : public cell
{
...
void evolveE()
{
// some diff stuff
}
};