【问题标题】:C++ stack in Objective-C++Objective-C++ 中的 C++ 堆栈
【发布时间】:2010-05-06 07:47:37
【问题描述】:

我想在 Objective-C 中使用 C++ 堆栈类型,但我遇到了一些问题。这是我想做的一个示例:

#import <stack>
#import <UIKit/UIKit.h>

@interface A : NSObject {
    stack<SEL> selectorStack;
}

@end

不幸的是,这不能编译。在弄乱了代码一段时间并尝试了不同的事情之后,我似乎无法找到实现这一目标的方法。有人能告诉我在 Objective-C 对象中使用 C++ 堆栈的最佳方式吗?或者是否有可能?

谢谢。

更新:

好吧,KennyTM 的答案适用于我的示例文件,但由于某种原因,当我尝试重命名该类时它停止工作。这是我现在拥有的代码:

#import <stack>
#import <UIKit/UIKit.h>

@interface MenuLayer : NSObject {
    std::stack<SEL> selectorStack;
}

@end

编译器吐出以下错误:

stack: No such file or directory
expected specifier-qualifier-list before 'std'

【问题讨论】:

  • 确保您没有不小心将其重命名为以.m 结尾而不是.mm。否则 C++ 头文件不在头文件搜索路径中(当然你不能使用 C++)。
  • 我仔细检查了它,扩展名是.mm。不过要清楚一点,该接口位于头文件中。这有什么不同吗?
  • 如果标头包含在一些普通的 Objective-C (.m) 文件中,您最终会遇到同样的问题。参见例如here 替代方案。
  • 不透明的指针工作得很好。谢谢女朋友。如果您要将您的答案复制到回复中,那么我会给您打勾。再次感谢。
  • 添加它以供将来参考,但给 KennyTM 打勾 - 他解决了最初发布的问题。我只修复了后续。

标签: c++ stack objective-c++


【解决方案1】:

你试过了吗

@interface A : NSObject {
    std::stack<SEL> selectorStack;
}

【讨论】:

  • 您好,感谢您的快速回复。我觉得没有指定完全限定的类名有点愚蠢。当我对我的示例文件进行更改时,它解决了问题。但是,我尝试将类的名称更改为其他名称,编译器会吐出几个新错误。我用更多信息更新了我的帖子。再次感谢。
【解决方案2】:

对于第二个问题,请确保您没有意外重命名以 .m 结尾的文件而不是 .mm。否则 C++ 头文件不在头文件搜索路径中(当然你不能使用 C++)。

此外,如果标头包含在一些普通的 Objective-C 文件 (.m) 中,您最终会遇到同样的问题。你可以避免这种情况,例如通过使用opaque pointers

【讨论】:

    猜你喜欢
    • 2012-04-26
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 2012-01-18
    • 2013-07-06
    相关资源
    最近更新 更多