Краткая версия: у меня есть Qt / C ++, к которому мне нужно добавить ограниченное количество кода Cocoa / Objective-C. Я изменил файл .cpp на файл .mm и добавил код / объекты objective-c в указанный файл, и он компилируется и работает. Теперь мне нужен делегат для одного из созданных мною объектов - NSPopUpButton (или, точнее, его меню), если быть точным - и я застрял. Как я могу добавить делегата для этого объекта?
Подробности: рассматриваемые файлы:
reportwindow.h, reportwindow.cpp ПЕРЕИМЕНОВАН в reportwindow.mm - Это файлы, содержащие мою исходную реализацию на C ++ плюс некоторый код objective-c (откройте NSSavePanel, содержащий NSPopUpButton). reportwindow.h дополнительно включается в файл .cpp, если это имеет значение.
menuHandler.h, menuHandler.mm - эти файлы содержат (на данный момент пустой) класс objective-c, который я намеревался использовать в качестве делегата
Моя первая мысль заключалась в том, что я мог бы просто сделать класс C ++ делегатом, но это явно не работает, поскольку обычный C ++ не понимает делегирования. Затем я подумал, что создам отдельный класс objective-c как NSMenuDelegate и добавлю его экземпляр в качестве объекта-члена к моему классу C ++. Поскольку мне удалось добавить в качестве членов другие объекты objective-c, я решил, что это должно сработать. Однако, как только я включил заголовок для моего нового класса objective-c в файл заголовка класса C ++, я получил несколько сотен ошибок о «ожидаемом неквалифицированном идентификаторе перед токеном '@'» - из файлов заголовков Apple (NSValue.h , NSObject.h и т. Д.) Очевидно, это не сработало, по крайней мере, не как есть. Я получаю тот же результат, когда включаю ЛЮБОЙ заголовок какао в файл заголовка моего класса.
Затем я подумал, что попробую продвинуть объявление класса objective-c (именно так я заставил работать другие объекты objective-c). однако это тоже не сработало - если я объявляю его как "class myClassName", я получаю сообщение об ошибке переопределения класса как другого типа символа (предположительно, класс C ++ против протокола objective-c). Если я попытаюсь переслать объявление как @protocol myClassName, я получаю сообщение об ошибке «ожидаемый неквалифицированный идентификатор перед токеном @». Итак, как я могу заставить это работать?
reportwindow.h
. - person hamstergene   schedule 25.10.2011