Кратка версия: Имам Qt/C++, към който трябва да добавя ограничено количество Cocoa/Objective-C код. Промених .cpp файла на .mm файл и добавих object-c кода/обектите към споменатия файл и той се компилира и работи. Сега имам нужда от делегат за един от обектите, които създадох - NSPopUpButton (или, по-скоро, менюто му), за да бъда точен - и съм заседнал. Как мога да добавя делегат за този обект?
Подробности: Въпросните файлове:
reportwindow.h, reportwindow.cpp ПРЕИМЕНОВАНИ НА reportwindow.mm -Това са файловете, съдържащи моята оригинална реализация на C++ плюс някакъв object-c код (отворете NSSavePanel, съдържащ NSPopUpButton). reportwindow.h е допълнително включен в .cpp файл, ако това има значение.
menuHandler.h, menuHandler.mm - тези файлове съдържат (в момента празен) object-c клас, който възнамерявах да използвам като делегат
Първата ми мисъл беше, че мога просто да направя C++ класа делегат, но това очевидно не работи, тъй като C++ не разбира делегирането. Тогава си помислих, че ще направя отделен клас object-c като NSMenuDelegate и ще добавя негов екземпляр като член-обект към моя C++ клас. Тъй като успях да добавя други обекти на object-c като членове, реших, че това трябва да работи. Въпреки това, веднага щом включих заглавката за новия ми клас на goal-c в заглавния файл на клас C++, получих няколкостотин грешки относно „очакван неквалифициран идентификатор преди токена „@““ - от заглавните файлове на ябълката (NSValue.h , NSObject.h и т.н.) Така че очевидно това не работи, поне не както е. Получавам същия резултат, когато включвам ВСЯКАКВА заглавка на какао в моя заглавен файл на клас.
Тогава си помислих, че ще опитам декларация напред на класа goal-c (по този начин накарах другите обекти-c да работят). обаче и това не проработи - ако го декларирам като "class myClassName" получавам грешка относно повторното дефиниране на класа като различен тип символ (вероятно c++ клас срещу goal-c протокол). Ако се опитам да препратя да го декларирам като @protocol myClassName, получавам грешка относно „очакван неквалифициран идентификатор преди токена „@“. И така, как мога да накарам това да работи?
reportwindow.h
. - person hamstergene   schedule 25.10.2011