2010-09-28 75 views
6

当我使用'命令行工具'C++ stdC++模板创建一个xCode项目时,我能够包含并编译opencv头文件并运行一些代码。如何在可可应用程序中包含OpenCV?

但我想在'Cocoa Application'上下文中使用OpenCV。当用这个模板创建时,当我在main.mm中包含OpenCV标题时,出现了编译错误。 (我已经将main.m更改为main.mm,'// NSApplicationMain(argc,(const char **)argv);'被注释掉了)

其中一个错误是:“允许使用Statement-表达式只有在函数内部”

我想它的某种编译器版本的错误,但是当我比较项目生成设置我不能找到差异。

您有任何想法/专业知识吗?

回答

1

尝试增加:-lstdc++来为您的Cocoa程序构建设置“其他连接标志”。

通过Xcode的模板之前,将不会链接Cocoa应用程序中包括C++库默认情况下它的设置。

+0

您好,我还增加了-lz,但还是得到了同样的错误。我正在建立在i386上。我错过了什么? – Fabian 2010-09-28 14:16:48

+0

你为什么要评论NSApplicationMain()?你必须用更具体的信息来更新你的问题,比如确切的错误信息和/或足够的代码片段来寻找问题的线索。 – petert 2010-09-28 15:10:39

0

您可能会发现使用OpenCV的C API而不是C++ API更容易。当然你可以直接从Objective C调用C API,这样可以让生活变得更容易。你只是失去了一些C++的语法糖,比如默认的参数值。

18

我遇到了同样的问题,我了2天做严重的系统跟踪和预期,该解决方案是如此简单,一个8岁,可以更加迅速地比我找到了。

准备好了吗?

在您要使用的OpenCV的.mm文件,你需要做的#include "opencv2/opencv.hpp"在任何其他包括。而已!只要将它移动到一条线上,就可以看到你的问题比真正将房间绑在一起的地毯更快地消失。

这是针对OpenCV 2.2的,因此是新的包含文件。此外,如果您的XCode项目使用前缀头文件(在“其他来源”中查找“YourProjectName_Prefix.pch”文件),那么您需要将#include "opencv2/opencv.hpp"而不是其他文件。

+1

即使没有实际的Prefix.pch,目标的构建设置也可能包含一个前缀头,如系统的UIKit.h。删除后,它终于建立在我的机器上。 – 2011-02-02 16:28:41

2

即使您将“main.m”重命名为“main.mm”并将“#include opencv2/opencv.hpp”移动到顶部(在主文件中),预处理器也会先插入cocoa.h由于预编译头文件需要像“_Prefix.pch”一样。为了避免这样的问题 - 删除#import语句或 - 插入cocoa.h import语句上面的#import语句

1
  1. 的#进口语句之前添加到您。PCH文件

    #ifdef __cplusplus 
    #import <opencv2/opencv.hpp> 
    #endif 
    
  2. 不要忘记所有的.m文件的转换为.mm文件

相关问题