【问题标题】:c++ Boost Mix with objective-cc++ Boost Mix with Objective-c
【发布时间】:2015-09-04 08:21:28
【问题描述】:

我正在尝试构建使用 boosts 的 c++ 项目。 我创建了一个使用 OSX-SDK-9 的 Objective-C++ 类,并且我计划向我们提供来自普通 C++ 类的具有增强功能的类。 使用SDK框架的object-c++:

AppKit.framework
CoreGraphics.framework

它有包含

#include <ApplicationServices/ApplicationServices.h>
#include <Carbon/Carbon.h>
#include <AppKit/AppKit.h>
#include <AppKit/NSEvent.h>

当我将 object-c++ 的包含添加到 boost 类时,我看到编译错误 Error 当我删除提升包括构建成功

boots在静态库中编译

使用以下参数构建代码

xcode 6.3.2(6D2105)
compiler Apple LLVM6.1
GUN++11 [-std=gun++11]
libc++(LLVM c++ standard library with c++11 support)

我做错了什么? 我如何在同一个程序中使用 c++ boost 和 OSK SDK

【问题讨论】:

  • 您可以嵌入图片或将错误复制粘贴到问题中,方便用户获取信息。加载外部资源只是一个额外的步骤。
  • 什么是boost版本?您包括哪些增强标头? Collections.h 文件是什么样的?请显示其内容。有一个名字冲突,但如果没有看到整个画面,很难猜出它在哪里。
  • ...同时,确保你在#include ObjectiveC 头文件之前 Boost 头文件,并且不要偶尔在某些命名空间中包含头文件。

标签: c++ objective-c macos c++11 boost


【解决方案1】:

看起来这是 Boost 的 Collection 类型和 Carbon Collection Manager 之间的名称冲突。

“集合”在此标头中定义:

#include <CarbonCore/Collections.h>

并且在boost中的几个地方都使用了“Collection”这个符号。

构建日志应显示导致问题的确切 boost 标头。您可以包含一个较小的 boost 标头子集以避免“集合”符号,或者可以在单独的源代码文件中编写使用 boost 的函数以避免冲突。

【讨论】:

  • FWIW,符号 Collection 在 boost 中仅用作模板参数,因此通常不会引起任何歧义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
相关资源
最近更新 更多