簡體   English   中英

C++17 和重載功能

[英]C++17 and Overloaded functions

我有這個項目,我正在嘗試更新,以便可以在 VS2019 中使用 <filesystem> header。 當我將“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 =='

所以似乎不支持重載的 function 選項。 使用 /std:c++17 編譯器選項時是否可以重載函數?

謝謝雷米勒博的回答。 CString 和 CAtlString 在 C++17 中似乎是同一個東西。 當我用 CAtlString 注釋掉重載版本時,它會編譯並允許第二次重載,因為它不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM