【发布时间】:2020-09-24 11:01:27
【问题描述】:
我正在做一个项目,其中部分是 C 编写的,部分是 C++ 编写的。
我得到了 2 个基本上代表相同的枚举,但是一个被包装在一个类中,另一个由于 C 兼容性而位于全局命名空间中。
//C Code File
typedef enum
{
C_Enum_first = 0,
C_Enum_Second,
} C_Enum_T
//(obviously) C++ Code file
class CMyClass
{
public:
enum class CPP_Enum
{
first= 0,
second,
};
CPP_Enum& operator= ( const C_Enum_T& rhs);
}
现在我在全局命名空间范围内有一个函数,它以 Cpp 枚举作为参数
bool FooFunc(const CMyClass::CPP_Enum value);
但是由于与 C 代码的兼容性问题,在某些地方会使用 C 枚举值调用此函数
bool res = FooFunc(C_Enum_Second);
这给了我一个未知的转换错误。 是的,我知道我可以重载,但出于演示目的,我只展示了 1 个枚举参数。实际上,有 3 个枚举会增加我需要的重载。 为什么我的赋值运算符没有被调用?赋值运算符不能隐式作用于函数参数吗?
感谢您的帮助
问候朱利安 :)
【问题讨论】:
-
对于从一种类型到您的类的隐式转换,您需要一个非显式的构造函数,而不是赋值运算符。