Как смешать Qt, C ++ и Obj-C / Какао - PullRequest
13 голосов
/ 01 марта 2010

У меня есть чистый проект C ++ / Qt на Mac, но теперь я обнаружил, что мне нужно вызвать несколько методов, доступных только в API Какао. Следующие инструкции перечислены здесь:

http://el -tramo.be / блог / смесительно-какао и-кварта

У меня есть реализация класса C ++ в файле ".m". В качестве теста мой файл "foo.m" содержит следующий код (соответствующие #include методы были удалены для ясности):

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

Очевидно, мне нужно добавить файл .m в переменную qmake с именем OBJECTIVE_SOURCES. Мой проект .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 и перемещаю файл .m в раздел SOURCES моего файла Qt .pro, все работает должным образом.

Я использую Qt 4.6.0.

У меня вопрос: каков рекомендуемый способ интеграции вызовов Cocoa с Qt / C ++ и что я делаю неправильно в приведенном выше примере?

1 Ответ

18 голосов
/ 01 марта 2010

Он компилирует ваш .m файл как Objective-C. Вы хотите, чтобы это был .mm файл для Objective-C ++.

...