【发布时间】:2020-04-08 20:32:44
【问题描述】:
我有这个项目,我正在尝试更新,以便可以在 VS2019 中使用
class ATL_NO_VTABLE CAPropertyPage :
{
public:
struct INFO_STRUCT
{
INFO_STRUCT()
: deviceType(0)
, index(0)
{
};
bool operator ==(const CAtlString &str)
{
return name.CompareNoCase(str) == 0;
}
bool operator ==(const CString &str)
{
return name.CompareNoCase(str) == 0;
}
bool operator ==(const INFO_STRUCT &is)
{
return name.CompareNoCase(is.name) == 0;
}
CString name;
DWORD deviceType;
int index;
};
};
它使用 Default 编译得非常好,但使用 /std:c++17 我收到以下错误消息:
error C2535: 'bool CAPropertyPage::INFO_STRUCT::operator ==(const ATL::CAtlString &)': member function already defined or declared
message : see declaration of 'CAPropertyPage::INFO_STRUCT::operator =='
所以似乎不支持重载函数选项。 使用 /std:c++17 编译器选项时是否可能有重载函数?
【问题讨论】:
-
你能给我们两个声明所在的行号吗?
-
This page 似乎相关。它提到了两种字符串类型。
-
该错误表明
CAtlString和CString在C++17 下是完全相同的类型,但不是在默认值下。我建议完全摆脱CAtlString重载,让调用者担心如果需要将任何CAtlString对象转换为CString。