在我的项目中,我声明了一个名为ReplaceFile的函数,但是在cpp中引用它时,却出现了最奇怪的错误。它在我编写的方法的末尾附加了“W”。

c++ - C2039: 'Method' + W不是该类的成员-LMLPHP

到底为什么会认为我写了ReplaceFileW?我已经在项目中搜索了ReplaceFileW,但没有任何结果。

如果您需要其他任何说明,请发表评论,否则,这是否是简单的解决方法?

这是ReplaceFile header 中的声明,并且它是重载的:

 // Description: replace an existing file into the package
void ReplaceFile(std::string path, std::string pathInPackage, void(*replaceProgress)(void*, DWORD,
        DWORD) = NULL, void *arg = NULL);

// Description: replace an existing file into the package
void ReplaceFile(std::string path, StfsFileEntry *entry, std::string pathInPackage,
        void(*replaceProgress)(void*, DWORD, DWORD) = NULL, void *arg = NULL);

谢谢你的时间。

最佳答案

这是因为Windows函数 ReplaceFile 。与几乎所有WINAPI函数一样,它具有两个变体:

  • 宽字符字符串的ReplaceFileW
  • ASCII字符串的
  • ReplaceFileA

  • 使用哪一个取决于UNICODE宏。这就是问题所在:符号ReplaceFile只是一个预处理程序宏,根据ReplaceFileW宏扩展为ReplaceFileAUNICODE。和所有宏一样,它是无条件扩展的。

    解决方案:包括Windows系统头文件后,取消定义ReplaceFile宏:
    #include <windows.h>
    #undef ReplaceFile
    

    关于c++ - C2039: 'Method' + W不是该类的成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38784294/

    10-13 05:57