20:11

Здравствуйте!

Есть класс MainWindow. В нем - публичная переменная int N.
Дальше я хочу к ней обратиться из другого класса:



А компилятор пишет,

expected primary-expression before '.' token
int K = MainWindow.N;
^

Что я делаю не так?

@темы: C++

Комментарии
01.06.2014 в 20:30

IDDQD - Команда молодости нашей, команда, без которой мне не жить.
int K = MainWindow.N;
А в чём вообще был изначальный смысл этой строчки?
Если что: в этой строчке вы пытаетесь объявнить переменную K, являющуюся членом класса, и проинициализировать её чем-то странным. Проблемы две:
1. Такая форма инициализации поддерживается только в C++11
2. Такой способ обращения к переменным другого класса в C++ в принципе запрещён. Должно быть как минимум MainWindow::N, и то, для этого N должна быть публичной статической переменной класса MainWindow.
01.06.2014 в 20:36

Flex Ferrum

Должно быть как минимум MainWindow::N

Так я изначально и написала. На это компилятор ругался:

invalid use of non-static data member 'MainWindow::N'
int M, N;
^

Ну, в общем, она не static. А как к не статической переменной обратиться?

Я их (эти классы) и френдить пыталась, но одного упоминания дружественного класса, как в большинстве нагугленных примеров, недостаточно.
01.06.2014 в 21:01

Ethera,
для обращения к нестатической переменной нужен либо экземпляр класса, либо указатель на него. Через них и обращаться
01.06.2014 в 21:13

ninelya, указатель на класс, вы имеете в виду? Экземпляр класса мне не точно подходит.

А как это (с указателем) будет выглядеть? :beg:
01.06.2014 в 21:15

IDDQD - Команда молодости нашей, команда, без которой мне не жить.
Экземпляр класса мне не точно подходит.
Это как? Указатель может быть только на экземпляр. Так что, либо делаете это поле статическим, либо откуда-то откапываете указатель на экземпляр класса MainWindow.
01.06.2014 в 21:24

Flex Ferrum, да, это я уже поняла. У меня какая ситуация: при старте программы пользователь вводит значение с клавиатуры, и этим значением инициализируется переменная int N. Я так понимаю, что она при этом static быть не может?

С другой стороны, чем черт не шутит, я сделала "static int N". В результате при каждом обращении к переменной N в программе выдается ошибка "undefined reference to `MainWindow::N'". :bricks:
01.06.2014 в 21:33

Кажется, я поняла, что мне нужно: нужно добыть указатель на уже существующий класс MainWindow.

Но, я лакимэн, пример отсюда не сработал у меня.

ошибка: incomplete type 'QApplication' used in nested name specifier
MainWindow *nw = qobject_cast( QApplication::topLevelWidgets()[ 0 ] );
^
01.06.2014 в 21:40

IDDQD - Команда молодости нашей, команда, без которой мне не жить.
ошибка: incomplete type 'QApplication' used in nested name specifier
MainWindow *nw = qobject_cast( QApplication::topLevelWidgets()[ 0 ] );

Если этот код находится в реализации метода MainWindow, то можно смело заменить его на this.
01.06.2014 в 21:54

Вы имеете в виду MainWindow *nw = qobject_cast(this); ? Не помогло.

Вообще, кусок кода в mainwindow.h выглядит так:


02.06.2014 в 04:11

создаю островки хаоса в пучине порядка
ошибка: incomplete type 'QApplication' used in nested name specifier


02.06.2014 в 11:33

Imaginary Unit, помогло. Спасибо! :heart: