第 3 方标头之间的 C++ 命名空间冲突

问题描述 投票:0回答:1

这与另一个命名空间问题有关。

我正在将 Scaleform 集成到 OSX C++ 应用程序中。

我在 OSX 标头 (/usr/include/MacTypes.h) 和 Scaleform 标头之间遇到类型冲突:

...其他包括...
在 /System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h:43 包含的文件中:
在 /System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:77 包含的文件中:
/usr/include/MacTypes.h:249:9:错误:对“Ptr”的引用不明确
typedef Ptr * 句柄;
        ^
/usr/include/MacTypes.h:248:41:注意:通过名称查找找到的候选者是“Ptr”
typedef char * Ptr;
                                        ^
.../sf_4.6.33_osx_lib/Include/../Src/Kernel/SF_RefCount.h:364:7:注意:通过名称查找找到的候选者是 'Scaleform::Ptr'
类Ptr
      ^

我可能不想更改 /usr/include/MacTypes.h :-)。而且我不想走上修改 Scaleform 代码的道路。

我该如何解决这个问题?

c++ namespaces scaleform
1个回答
0
投票

解决方法是定义您自己的命名空间,并将冲突的 #include 语句之一放入新命名空间中。例如,如果您确定包含以下语句

#include <Carbon/Carbon.h>
代码中的

会导致您所描述的错误,然后将该语句放入新的命名空间中。例如,

namespace carbon {
    #include <Carbon/Carbon.h>
}

然后,您需要在任何对需要该标头的令牌的引用前面加上您创建的命名空间。例如,

carbon::VoiceSpec v;
carbon::VoiceSpec *vspec = &v;
carbon::OSErr theErr = carbon::noErr;
carbon::SInt16 vindex;
carbon::VoiceDescription vdesc;

感谢https://apple-dev.groups.io/g/xcode/topic/76179751向我提供了解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.