184 / 176 / 57
Регистрация: 25.09.2014
Сообщений: 828
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Ошибка при сборке проекта - invalid use of non-static data member 'MainWindow::test'20.04.2015, 11:49. Показов 5760. Ответов 18
Метки нет (Все метки)
Собственно, сабж. Собираю в QtCreator, но по-моему ошибка не имеет к нему никакого отношения. Возможно я просто не понимаю, как правильно обращаться в потоке к одному из трех QLineEdit на форме. Я решил пойти через указатели, но при передаче указателя выдает ошибку. Явно что-то делаю не так, но пока что сам не смог разобраться...
mainwindow.h:
0
|
20.04.2015, 11:49 | |
Ответы с готовыми решениями:
18
Массив в классе. Ошибка error: invalid use of non-static data member Массив в структуре. invalid use of non-static data member Ошибка: invalid use of non-static member function Ошибки: "invalid use of non-static data member", "error: from this location" |
Заблокирован
|
||||||
20.04.2015, 12:09 | 2 | |||||
Ну тут вообще ересь Сразу видно, что ты не знаешь, что такое static
1. У тебя void SetTextToLineEdit(QLineEdit* LineEditName, QString Text); объявлена как обычная функция (без static), так какого хрена ты её пытаешься как статическую в потоке вызвать ?
Если ты хочешь передать переменную - член класса, которая у тебя является указателем на QLineEdit, тебе сначала нужно создать объект своего класса - MainWindow* mw = new MainWindow; а потом уже пытаться что то делать со своей переменной: mw->test
0
|
184 / 176 / 57
Регистрация: 25.09.2014
Сообщений: 828
|
||||||
20.04.2015, 12:20 [ТС] | 3 | |||||
VoodooPuppet, Догадываюсь, что ересь...
Правильный код mainwindow.cpp:
0
|
Заблокирован
|
||||||
20.04.2015, 12:30 | 4 | |||||
Где ты создаёшь объект класса MainWindow ? Он у тебя один?
Что ты хочешь сделать из разных потоков? Хочешь текст менять? Если да, то передавай скажем в конструктор класса - потока указатель на объект MainWindow
0
|
184 / 176 / 57
Регистрация: 25.09.2014
Сообщений: 828
|
|
20.04.2015, 12:38 [ТС] | 5 |
Есть форма с тремя полями.
При старте программы показывается форма и запускается поток. В потоке идет прием датаграмм с usb устройства. Как только нужная датаграмма получена, поток возвращает данные. И теперь мне как раз и нужна функция, вносящая полученные из потока данные в форму. Я же вроде бы привел файлы в самом начале. Их не хватает? Вроде бы в них все действия указаны.
0
|
Заблокирован
|
|
20.04.2015, 12:52 | 6 |
Да.... там ДЖИ код
В общем смотри что тебе нужно сделать: 1. В классе формы сделай слот типа этого: OnSetTextToLineEdit(QString message); 2. В классе потока сделай сигнал void SetTextToLineEdit(QString message); 3. При старте программы, где ты создаёшь и показываешь свою форму, там же создавай объект класса потока, связывай его сигнал SetTextToLineEdit со слотом класса MainWidnow - OnSetTextToLineEdit. Запускай поток. 4. В потоке, при получение данных, емить сигнал SetTextToLineEdit с нужной строкой. 5. В MainWindow выставляй значение по принятой строке. P.S.: Не забудь в свойствах соединения сигнала и слота указать Qt::QueuedConnection, т.к. объекты находятся в разных потоках
1
|
184 / 176 / 57
Регистрация: 25.09.2014
Сообщений: 828
|
|
20.04.2015, 12:58 [ТС] | 7 |
Пока что я не приступал к приему данных. Поигрался - устройство видится и в блок обработки входных данных попадаем. На этом остановился, код вырезал.
Сейчас я просто пытаюсь сделать функцию редактирования текстбокса. В нее передаем текстбокс и текст. Форма обновляется. Но пока что я не понимаю, как мне использовать приведенные вами инструкции.
0
|
Заблокирован
|
|
20.04.2015, 13:02 | 8 |
Эта функция - член класса MainWindow? Зачем в неё указатель на текстбокс передавать, если этот указатель и так хранится как свойство класса?
0
|
184 / 176 / 57
Регистрация: 25.09.2014
Сообщений: 828
|
|||||||||||||||||||||
20.04.2015, 13:20 [ТС] | 9 | ||||||||||||||||||||
Функция - член класса MainWindow.
Указатель тоже член класса:
Если остановиться на таком вызове функции в потоке:
0
|
Заблокирован
|
|
20.04.2015, 13:32 | 10 |
Ну просто ты не знаешь С++. В этом вся и загвоздка... Думаю, рановато в Qt полез ... Ладно, так и быть - ща пример накидаю, жди ....
0
|
Заблокирован
|
|
20.04.2015, 13:41 | 11 |
Сообщение было отмечено Горбаг как решение
Решение
Держи архив с примером
1
|
184 / 176 / 57
Регистрация: 25.09.2014
Сообщений: 828
|
|
20.04.2015, 13:44 [ТС] | 12 |
Буду премного благодарен.
Я действительно не знаю C++, есть некие зачаточные знания, но в узких вопросах какой-то пробел. А проблемы сейчас у меня только потому, что устроился стажером в одну фирму... Ожидал какого-то обучения. А на деле все иначе. Есть задача - делай, как хочешь. Приходится крутиться и учиться самостоятельно и тратить еще и свободные вечера и выходные. Но, беда как раз в том, что времени учить толком нет - нужно кодить, ибо требуют результат. Как-то так. Но меня больше все таки пугает логика. В одной файле объявил функцию и указатель. В другом файле подключил первый файл и воспользовался функцией. А он, зараза, ругается. Вроде бы всю жизнь так было, но тут какой-то затык.
0
|
Заблокирован
|
|
20.04.2015, 14:06 | 13 |
А... я то думал ты очередной халявщик - студент, который тут в наглую требует сделать за него его же лабораторную или курсовую ...
Тогда уважуха тебе. Спрашивай, что не понятно. Пример я тебе дал, разобрался?
0
|
184 / 176 / 57
Регистрация: 25.09.2014
Сообщений: 828
|
||||||
20.04.2015, 14:26 [ТС] | 14 | |||||
Перенес себе, ошибка:
Однако, к сабжу - а если все-таки пойти НЕ через сигналы/слоты? Как исправить именно тот код, который я выкладывал выше?
0
|
Заблокирован
|
|
20.04.2015, 14:33 | 15 |
Попробуй создай у себя новый Widget проект и перенеси в него мой код. Там кода то с гулькин нос
Никак. Там ряд фатальных ошибок, вызванных не пониманием языка С++. Делай, как я тебе сказал.
0
|
184 / 176 / 57
Регистрация: 25.09.2014
Сообщений: 828
|
||||||
20.04.2015, 14:42 [ТС] | 16 | |||||
Дико извиняюсь.
Погуглил, ничего не нашел. Вернулся к ошибке - стал внимательно читать строку и, что необычно, в ней же и нашел решение:
Но все-таки немного жаль, что вы не можете привести именно мой код в исправленном виде или пнуть меня в верном направлении =)
0
|
Заблокирован
|
|
20.04.2015, 14:58 | 17 |
Как это криво? После того как ты разархивировал проект и открыл его в QtCreator-е, ты специально стёр Q_OBJECT и потом про это забыл ?
Да могу, почему нет. Я ж тебе сказал, тебе нужен указатель на объект MainWindow (который у тебя один) в классе потока, можешь его в конструкторе передавать и уже в функции Run вызывать нужную функцию через этот указатель. Но это неправильный подход без синхронизации доступа к твоему QLineEdit-у, хотя в случае одного дополнительного потока будет работать.
0
|
184 / 176 / 57
Регистрация: 25.09.2014
Сообщений: 828
|
|
20.04.2015, 15:07 [ТС] | 18 |
Грустно, но мне сложно ухватить суть.
Лучше мне будет подучить плюсы, да как следует - у меня явные пробелы с азами. А пока буду просто пользоваться вашим решением - уже подогнал его под прием данных с usb. Большое спасибо за помощь. З.Ы. А переносил руками - открывал файлы, анализировал код и переносил. Потому и забыл одну строчку. Да и к тому же - открывал на главном компе, лениво было переносить на виртуалку дебиана через дропбокс =)
0
|
Заблокирован
|
|
20.04.2015, 15:09 | 19 |
0
|
20.04.2015, 15:09 | |
20.04.2015, 15:09 | |
Помогаю со студенческими работами здесь
19
Ошибка "non-static data member initializers only available with -std=c++11 or -std=gnu++11" Widgets, ошибка: 'class Ui::MainWindow' has no member named <...> Ошибка при сборке: Invalid parameter passed to C runtime function Ошибка при сборке проекта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |