c++ - C++17 和重载函数
问题描述
我有这个项目,我正在尝试更新,以便可以在 VS2019 中使用 <filesystem> 标头。当我将“C++ 语言标准”编译器选项从“默认”更改为“/std:c++17”时,以下代码会中断:
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 编译器选项时是否可以重载函数?
解决方案
谢谢雷米勒博的回答。CString 和 CAtlString 在 C++17 中似乎是同一个东西。当我用 CAtlString 注释掉重载版本时,它会编译并允许第二次重载,因为它不同。
推荐阅读
- php - 在 HasMany Eloquent 关系中保存多个 ID
- c# - 拆分字符串数组后如何取出值?
- java - 如何在 Spring Rest Request 中访问内部 json 对象
- laravel - 如何打破第二个foreach循环
- google-sheets - 表格中的 BigQuery API 连接(潜在缓存)
- php - 在关键基础上分离 Array 对象 - PHP
- javascript - 检查对象数组中是否存在日期
- javascript - 在浏览器的默认 HTML5 视频播放器中,如何检测用户何时通过 CC 按钮启用/禁用字幕?
- haskell - 检查输入值的类型签名并比较部分值
- google-app-maker - App Maker - Drive Picker 小部件 - 如果嵌入在 Google 站点中,则为空的白色对话框