Я в проекте использую расширенный от QGuiApplication класс, названный мною App, который отличается от QGuiApplication только одним дополнительным элементом:
class App : public QGuiApplication
{
public:
App(int &argc, char **argv);
Core core;
};
И у меня есть такой макрос:
#define APPCORE static_cast<App*>(qApp)->core
Он мне нужен для того, чтобы обращаться к ядру из любого места программы. И его использование нормально компилируется во всей программе. В любом классе, будь он наследником QObject, или обычный класс, данный макрос нормально компилируется.
Однако, если я пытаюсь использовать макрос APPCORE в функции, которая просто лежит в main.cpp:
void criticalError(QString message)
{
...
APPCORE.emitCriticalError(message);
...
}
то при компиляции возникает ошибка:
../src/main.cpp: In function ‘void criticalError(QString)’:
../src/main.h:21:39: error: invalid static_cast from type ‘QApplication*’ to type ‘App*’
#define APPCORE static_cast<App*>(qApp)->core
^
../src/main.cpp:78:5: note: in expansion of macro ‘APPCORE’
APPCORE.emitCriticalError(message);
^
Makefile:1998: recipe for target 'main.o' failed
make: *** [main.o] Error 1
Что-то я не пойму, почему приведение типов from ‘QApplication*’ to ‘App*’ работает во всей программе, но не работает именно в этом месте?
UPD Ссылка на минимальный пример: Почему не срабатывает static_cast в main.cpp, а в других местах срабатывает? (комментарий)
или : https://www.dropbox.com/s/6y53llhtcw38fh1/staticCastSample.rar?dl=0