gpt4 book ai didi

c++ - 错误 : ambiguous default type conversion (c++)

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:01:33 25 4
gpt4 key购买 nike

我有一个包装枚举的类,以便于打印、序列化等。
我希望能够在 switch 语句中使用它作为传统枚举,因此我一直在使用 int() 重载器直到 gcc-4.3。但是,我的代码现在因 gcc-4.5.1 而中断。

enum E { consta, constb };
class Wrap {
private:
E e;
public:
operator E() { return e;}
operator E() const { return e;}
operator int() const { return e;}
Wrap(E a) : e(a) { }
};

int main() {
Wrap x(constb);
x = consta;
switch (x) { /* Error here */
case consta: // ..
case constb: // ..
}
return 0;
}

编译器错误是:
错误:来自“Wrap”的不明确默认类型转换
错误:候选转换包括 'Wrap::operator E() const' 和 'Wrap::operator int() const'

这是库的一部分,我希望代码适用于所有版本,因此删除 int 重载器不是一个选项。

最佳答案

如果您专门解决编译器错误,只需使用条件编译来创建一个变通办法并使其尽可能独立。

#if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) <= 40300
typedef int E; // workaround
# define ENUM_TYPE // do not define an enum type as it's not fully supported
#else
# define ENUM_TYPE E // newer GCC supports enum better
#endif

enum ENUM_TYPE { consta, constb };
#undef ENUM_TYPE

……在这一点之后,您可以忘记解决方法,只需要一个运算符(operator)……

  operator E() const { return e;}

关于c++ - 错误 : ambiguous default type conversion (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5574528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com