我有问题,std :: numeric_limits :: min()与"windef.h"中定义的"min"宏冲突.有没有办法解决这个冲突而不取消定义"min"宏.下面的链接提供了一些提示,但是我无法使用带有静态成员函数的括号.
先感谢您.
我有一些C++代码,其中包含一个名为CreateDirectory().   Previous的方法,以前代码只使用了STL和Boost,但最近我必须包括<windows.h>所以我可以查找CSIDL_LOCAL_APPDATA.
现在,这段代码:
filesystem.CreateDirectory(p->Pathname()); // Actually create it...
不再编译:
error C2039: 'CreateDirectoryA' : is not a member of ...
这对应于此宏winbase.h:
#ifdef UNICODE
#define CreateDirectory  CreateDirectoryW
#else
#define CreateDirectory  CreateDirectoryA
#endif // !UNICODE
预处理器正在重新定义我的方法调用.有没有办法避免这种命名冲突?或者我必须重命名我的CreateDirectory()方法?
我有这个严重的问题.我在2个名称空间中有一个枚举,如下所示:
namespace FANLib {
namespace ERROR {
    enum TYPE {
        /// FSL error codes
        FSL_PARSER_FILE_IERROR,...
在我的代码中的其他地方,我使用它像这样:
FANLib::Log::internalLog(FSLParser::FILE_IERROR, file_ierror, true, FANLib::ERROR::FSL_PARSER_FILE_IERROR);
所有编译都很好,但如果我碰巧包含"windows.h",我会收到错误!问题出在"WinGDI.h"中,其中包含以下行:
#define ERROR               0
并使编译器认为,在FANLib :: ...之后,有一个零!我得到的错误是:
错误1错误C2589:'常数':'::'右侧的非法令牌
错误2错误C2059:语法错误:'::'
错误3错误C2039:'FSL_PARSER_FILE_IERROR':不是'`global namespace''的成员
我可以做些什么,而不必因为一些不经意而改变我的命名空间#define?我在另一篇文章中读过我可以#undef ERROR,但这有多安全?
我发现boost中的代码类似于:
class A
{
    stats stat;
public:
    int min() const{ return (stat.min)(); }
};
...
int stats::min()
{
...
}
为什么括号在这里?我知道它可以用于"最烦恼的解析"并禁止ADL.但也许别的什么?提前致谢!
编辑
为了解决这个问题,我将以下内容添加到头文件的开头:
#ifdef GetMessage
#undef GetMessage
static inline BOOL GetMessage(
LPMSG lpMsg,
HWND hWnd,
UINT wMsgFilterMin,
UINT wMsgFilterMax
) {
#if UNICODE
return ::GetMessageW(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
#else
return ::GetMessageA(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
#endif
}
#endif
我正在从以下代码创建一个C++ DLL(使用Visual Studio 2008):
头文件:
#include <windows.h> // Edit: This is the culprit.
class __declspec(dllexport) TestBaseClass
{
protected:
   char m_Message[512];
public:
   TestBaseClass();
   virtual char* GetMessage(void) = 0;
};
class __declspec(dllexport) TestDerivedClass : public TestBaseClass
{
public:
   TestDerivedClass();
   virtual char* GetMessage(void);
};
CPP文件:
TestBaseClass::TestBaseClass()
{ …