Windows Universal 中的 c++ 默认参数错误

c++ default argument error in Windows Universal

代码行(trace)在 WinDesktop、Android、iOS 上编译得很好,但在 Windows Universal 上编译得不好。这是我自己的字符串 class。数组和 char 指针一直都是一样的。如果我尝试为 wchar_t 数组添加一个构造函数,它会立即说我已经有了那个构造函数。我错过了什么?

namespace Couloir
{
   class String
   {
      private:
        wstring Value;

       public:
         String();
         String( const String& cs );
         String( String&& cs );
         String( const wstring& );
         String( wstring&& );
         String( const wchar_t* );

         void trace( const String& contextualFormat = L"\n\r%s\n\r" ) const;
         //....
   };
}

错误:

Error   C2440   'default argument': cannot convert from 'const wchar_t [7]' to 'const Couloir::String &' 

更新:关闭 /ZW(使用 Windows 运行时扩展)导致没有 errors/warnings。为什么会这样?我需要打开它,以便在 WinU 世界中大放异彩。

更新 2:关闭 /ZW(修复所有错误)并删除 const(即 void trace(String& contextualFormat = L"\n\r%s\n\r" ) const;),同样的错误又回来了。好像/ZW导致const关键字不可见?

这显然是一个编译器错误报告错误。它已通过添加命名空间修复:

void trace( const Couloir::String& contextualFormat = L"\n\r%s\n\r" ) const;

错误是报了"const Couloir::String&",说明它去报错的时候就知道String引用了Couloir::String。但是在分析错误的时候,却以为是Platform::String.