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

Tho*_*omi 13 c++ cocoa qt qmake objective-c

我在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];
}
Run Code Online (Sandbox Code Playgroud)

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

TARGET = testApp
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
OBJECTIVE_SOURCES += foo.m
HEADERS += test.h
Run Code Online (Sandbox Code Playgroud)

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

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

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

我正在使用Qt 4.6.0.

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

ric*_*chb 18

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

  • 卫生署!问题是".m"文件实际应该是".mm" - 一旦改变了,那么一切都很完美. (2认同)