【发布时间】: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