如何混合Qt,C ++和Obj-C / Cocoa

时间:2010-03-01 10:13:20

标签: c++ objective-c cocoa qt qmake

我在Mac上有一个纯C ++ / Qt项目,但我现在发现我需要调用一些仅在Cocoa API中可用的方法。按照此处列出的说明操作:

http://el-tramo.be/blog/mixing-cocoa-and-qt

我在“.m”文件中有一个C ++类实现。作为测试,我的“foo.m”文件包含以下代码(为清晰起见,已删除相关的#include方法)。:

int foo::getMagicNumber()
{
    NSCursor *cursor = [NSCursor new];
}

显然,我需要将.m文件添加到名为OBJECTIVE_SOURCES的qmake变量中。我的项目.pro文件如下所示:

TARGET = testApp
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
OBJECTIVE_SOURCES += foo.m
HEADERS += test.h

但是,每当我尝试编译项目时,都会收到以下错误:

foo.h:4expected '=', ',', ';', 'asm' or '__attribute__' before 'foo'

这指向我头文件中的class foo文件。如果我从.m文件中删除所有cocoa调用,并将.m文件移动到我的Qt .pro文件的SOURCES部分,一切都按预期工作。

我正在使用Qt 4.6.0。

我的问题是:将Cocoa调用与Qt / C ++集成的推荐方法是什么,以及我在上面的示例中做错了什么?

1 个答案:

答案 0 :(得分:18)

它正在将您的.m文件编译为Objective-C。您希望它是Objective-C ++的.mm文件。