20:11 

Ethera
I'll put a gun to your head and pull the fuckin' trigger. (c)
Здравствуйте!

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



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

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

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

@темы: C++

Комментарии
2014-06-01 в 20:30 

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

2014-06-01 в 20:36 

Ethera
I'll put a gun to your head and pull the fuckin' trigger. (c)
Flex Ferrum

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

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

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

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

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

2014-06-01 в 21:01 

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

2014-06-01 в 21:13 

Ethera
I'll put a gun to your head and pull the fuckin' trigger. (c)
ninelya, указатель на класс, вы имеете в виду? Экземпляр класса мне не точно подходит.

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

2014-06-01 в 21:15 

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

2014-06-01 в 21:24 

Ethera
I'll put a gun to your head and pull the fuckin' trigger. (c)
Flex Ferrum, да, это я уже поняла. У меня какая ситуация: при старте программы пользователь вводит значение с клавиатуры, и этим значением инициализируется переменная int N. Я так понимаю, что она при этом static быть не может?

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

2014-06-01 в 21:33 

Ethera
I'll put a gun to your head and pull the fuckin' trigger. (c)
Кажется, я поняла, что мне нужно: нужно добыть указатель на уже существующий класс MainWindow.

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

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

2014-06-01 в 21:40 

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

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

2014-06-01 в 21:54 

Ethera
I'll put a gun to your head and pull the fuckin' trigger. (c)
Вы имеете в виду MainWindow *nw = qobject_cast(this); ? Не помогло.

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


2014-06-02 в 04:11 

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


2014-06-02 в 11:33 

Ethera
I'll put a gun to your head and pull the fuckin' trigger. (c)
Imaginary Unit, помогло. Спасибо! :heart:

Комментирование для вас недоступно.
Для того, чтобы получить возможность комментировать, авторизуйтесь:
 
РегистрацияЗабыли пароль?

ru_programming

главная