Здравствуйте!
Есть класс MainWindow. В нем - публичная переменная int N.
Дальше я хочу к ней обратиться из другого класса:
А компилятор пишет,
expected primary-expression before '.' token
int K = MainWindow.N;
^
Что я делаю не так?
Есть класс MainWindow. В нем - публичная переменная int N.
Дальше я хочу к ней обратиться из другого класса:
А компилятор пишет,
expected primary-expression before '.' token
int K = MainWindow.N;
^
Что я делаю не так?
А в чём вообще был изначальный смысл этой строчки?
Если что: в этой строчке вы пытаетесь объявнить переменную K, являющуюся членом класса, и проинициализировать её чем-то странным. Проблемы две:
1. Такая форма инициализации поддерживается только в C++11
2. Такой способ обращения к переменным другого класса в C++ в принципе запрещён. Должно быть как минимум MainWindow::N, и то, для этого N должна быть публичной статической переменной класса MainWindow.
Должно быть как минимум MainWindow::N
Так я изначально и написала. На это компилятор ругался:
invalid use of non-static data member 'MainWindow::N'
int M, N;
^
Ну, в общем, она не static. А как к не статической переменной обратиться?
Я их (эти классы) и френдить пыталась, но одного упоминания дружественного класса, как в большинстве нагугленных примеров, недостаточно.
для обращения к нестатической переменной нужен либо экземпляр класса, либо указатель на него. Через них и обращаться
А как это (с указателем) будет выглядеть?
Это как? Указатель может быть только на экземпляр. Так что, либо делаете это поле статическим, либо откуда-то откапываете указатель на экземпляр класса MainWindow.
С другой стороны,
чем черт не шутит,я сделала "static int N". В результате при каждом обращении к переменной N в программе выдается ошибка "undefined reference to `MainWindow::N'".Но,
я лакимэн,пример отсюда не сработал у меня.ошибка: incomplete type 'QApplication' used in nested name specifier
MainWindow *nw = qobject_cast( QApplication::topLevelWidgets()[ 0 ] );
^
MainWindow *nw = qobject_cast( QApplication::topLevelWidgets()[ 0 ] );
Если этот код находится в реализации метода MainWindow, то можно смело заменить его на this.
Вообще, кусок кода в mainwindow.h выглядит так: