【问题标题】:Possible Conflict between a macro and a method [duplicate]宏和方法之间可能存在冲突[重复]
【发布时间】:2015-03-27 23:48:36
【问题描述】:

我认为方法和 Windows 宏之间可能存在冲突。 我正在使用 cygwin gcc,这就是我的冲突的样子

File : MRepository.h
#pragma once

#ifdef  GetMessage
#undef  GetMessage
#endif  //GetMessage

class MRepository
{
public:

    std::wstring GetMessage(const std::wstring &key) const;
    ...
    ....

};

File : MRepository.cpp
bool MRepository::SomeMethod(boost::shared_ptr<foo> &nd)
{
        std::wstring type = this->GetMessage(L"SomeData"); //Error Here : Method not recognized
        ....
        ....        
    return available;
}

这是我从方法中得到的错误

error: 'class MRepository' has no member named 'GetMessageA'|

请注意,我调用了GetMessage,但它认为该方法称为GetMessageA,关于为什么编译器认为我在明确输入GetMessage 时尝试引用GetMessageA 有什么建议吗?

【问题讨论】:

  • 这是 Windows 为支持 Unicode 的方法所做的事情。 GetMessageA() 是 ANSI 版本,GetMessageW() 是宽字符串版本。
  • 我没有调用 GetMessageA 我正在尝试调用我自己的方法,称为 'GetMessage`
  • windows.h 有大量宏将 FuncThing 定义为 FuncThingA 或 FuncThingW,具体取决于是否定义了 UNICODE
  • 我知道你没有调用它,但 Windows.h 有一个名为 GetMessage() 的系统方法。尝试重命名它,看看它工作正常。或者不包括 Windows.h

标签: c++ gcc macros


【解决方案1】:

我发现的最佳解决方案是将您的方法重命名为不与 windows 宏冲突的东西。

您可能会在调用点的 .cpp 中发现 GetMessage 的宏已生效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-14
    • 2011-05-13
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多