Russian Qt Forum

Разное => Говорилка => Тема начата: StatuS74 от Май 11, 2011, 07:59



Название: публичные переменные
Отправлено: StatuS74 от Май 11, 2011, 07:59
суть проблемы заключается в том что у меня есть 2-е формы. одна главная а друга вызывается по нажатию кнопки на главной форме. так вот на второй форме есть переменные которые я  бы хотел использовать в 1 форме(главной).
описал так
Код:
 public: int bit =0; qulonglong speed =0; int stopBit =0; char chetnost[10];
но кампилятор ругается. в чем моя ошибка ? и как правельно  описать что бы их я видел из главной формы


Название: Re: публичные переменные
Отправлено: mutineer от Май 11, 2011, 08:05
Убери инициализацию переменных (которая "=0")

Но было бы неплохо увидеть хотя бы сообщения компилятора...


Название: Re: публичные переменные
Отправлено: StatuS74 от Май 11, 2011, 08:08
все равно ругается на public


Название: Re: публичные переменные
Отправлено: GreatSnake от Май 11, 2011, 08:08
Инициализация в теле класса позволительна только для интегральных констант.
Поэтому "обзовите" bit, speed и stopBit как "static" либо перенесите их инициализацию в конструктор.

И причём здесь Пользовательский интерфейс (GUI) ???


Название: Re: публичные переменные
Отправлено: mutineer от Май 11, 2011, 08:09
Выложи сообщения компилятора и код класса


Название: Re: публичные переменные
Отправлено: StatuS74 от Май 11, 2011, 08:11
выдает следующее : 1)expected ';' before 'public'
                              2) expected primary-expression ';' before 'public'



Название: Re: публичные переменные
Отправлено: Nimbus от Май 11, 2011, 08:12
И на будущее, лучше используйте методы get/set для получения или изменения переменных.
Очень не люблю, когда виджеты называют формами


Название: Re: публичные переменные
Отправлено: mutineer от Май 11, 2011, 08:13
Код класса где?


Название: Re: публичные переменные
Отправлено: StatuS74 от Май 11, 2011, 08:15
проблема решена. но у меня на виджите  есть поле для ввода слова. как его перегнать в переменную char
 chetnost = (ui_m->lineEdit_4->text()).?????  какой тип поставить ?


Название: Re: публичные переменные
Отправлено: StatuS74 от Май 11, 2011, 08:18
И на будущее, лучше используйте методы get/set для получения или изменения переменных.
Очень не люблю, когда виджеты называют формами


 а как ими пользоваться ? я просто новичек в этом а литературу читаю пока не встречал


Название: Re: публичные переменные
Отправлено: Nimbus от Май 11, 2011, 08:22
проблема решена. но у меня на виджите  есть поле для ввода слова. как его перегнать в переменную char
 chetnost = (ui_m->lineEdit_4->text()).?????  какой тип поставить ?
В char перегнать нельзя - это один байт. метод text() возвращает QString, а QString - это строка, а строка подразумевает несколько байт, значит, можно получить лишь указатель на первый символ и размер, т. е. перегнать в char* (QChar*), для этого есть метод data(). Типа
ui_m->lineEdit_4->text().data()
Только вот надо ли оно вам?:)
А если новичёк, то лучше не лезьте сразу в Qt. Лучше обычный C++ изучите для начала ;)


Название: Re: публичные переменные
Отправлено: StatuS74 от Май 11, 2011, 08:22
перенес переменные в описания класса компилятор выдал ошибку

:: error: collect2: ld returned 1 exit status


Название: Re: публичные переменные
Отправлено: GreatSnake от Май 11, 2011, 08:22
Во-первых, тебе сюда Вопросы новичков (http://www.prog.org.ru/board_60_0.html).
Во-вторых, С++ ты не знаешь, читать документацию ты не хочешь, мозгу свою поднапрячь не хочешь...


Название: Re: публичные переменные
Отправлено: StatuS74 от Май 11, 2011, 08:23
я с++ на среднем уровне знаю. а так на си шарпе работаю но начальник выдал задачу для реализации на Qt


Название: Re: публичные переменные
Отправлено: GreatSnake от Май 11, 2011, 08:26
Цитата: StatuS74
я с++ на среднем уровне знаю.
+
Цитировать
chetnost = (ui_m->lineEdit_4->text()).
Здесь даже начальным уровнем не пахнет :(


Название: Re: публичные переменные
Отправлено: StatuS74 от Май 11, 2011, 08:28
GreatSnake может хватит тут флудить.


Название: Re: публичные переменные
Отправлено: mutineer от Май 11, 2011, 08:30
Без кода тебе вряд ли тут нормально смогут помочь


Название: Re: публичные переменные
Отправлено: StatuS74 от Май 11, 2011, 08:32
код класса
Код:
#ifndef CONNECT_ADAPTERAPN1444_H
#define CONNECT_ADAPTERAPN1444_H
#include <QWidget>
# include "qstring.h"
#include "ui_connect_adaptera.h"
namespace Ui {
    class connect_adaptera;
}
class connect_adaptera: public QWidget,public Ui::connect_adaptera
{
Q_OBJECT

public:
explicit connect_adaptera(QWidget* parent = 0);
~connect_adaptera();

public:
    Ui::connect_adaptera *ui_m;
    int bit; qulonglong speed; int stopBit; QString chetnost[10];

private slots:
    void on_pushButton_2_clicked();
    void on_pushButton_clicked();
};

QT_END_NAMESPACE
#endif // CONNECT_ADAPTERAPN1444_H


Название: Re: публичные переменные
Отправлено: GreatSnake от Май 11, 2011, 08:34
Цитата: StatuS74
GreatSnake может хватит тут флудить.
Нет не хватит.
У тебя отсутствуют базовые знания, а ты не желая заняться самообразованием сразу лезешь в профессиональный форум.
Конечно, зачем тебе читать книжки, смотреть описание классов в ассистенте, ведь намного проще взять да спросить.
Порочная, однако, практика :(


Название: Re: публичные переменные
Отправлено: Igors от Май 11, 2011, 08:47
StatuS74, конечно сказанное GreatSnake звучит высокомерно и обидно (нехорошо клевать новичка), но по существу он прав, любой форум не предназначен для изучения базовых основ. Почитайте любую книгу по С++ (а еще лучше по С) - это нетрудно и интересно.


Название: Re: публичные переменные
Отправлено: Nimbus от Май 11, 2011, 08:50
я с++ на среднем уровне знаю. а так на си шарпе работаю но начальник выдал задачу для реализации на Qt
Я тоже на сишарпе работаю (а по ночам сижу в инете с красными глазами и восхваляю OpenSource  ;D ). Только вот, шарпом лучше всего пользоваться ПОСЛЕ полного познания C++, а иначе фигня выйдет.
А насчёт ошибки collect2: ld returned 1 exit status - она возникает во многих случаях, когда компилятору чего-то не хватает, либо он что-то не может сделать (например, если исполняемый модуль ещё висит в процессах, а вы его пытаетесь перезаписать на диске, либо не хватает каких-то реализаций объявленных методов класса. если пользуетесь Qt Creator, то можете посмотреть ошибку в консоли сборки - там полностью весь вывод сборщика и мока.


Название: Re: публичные переменные
Отправлено: StatuS74 от Май 11, 2011, 08:50
я бланша читаю в данный момент. а что вы хотели от студента ??? очень крутых знаний ? я и пошол работать что бы не делать  дурацких лаб. но всеже из за чего ошибка error: collect2: ld returned 1 exit status. не пойму в интернете читал методы исправления не помгло.


Название: Re: публичные переменные
Отправлено: Nimbus от Май 11, 2011, 08:53
я бланша читаю в данный момент. а что вы хотели от студента ??? очень крутых знаний ? я и пошол работать что бы не делать  дурацких лаб. но всеже из за чего ошибка error: collect2: ld returned 1 exit status. не пойму в интернете читал методы исправления не помгло.
Весь текст из консоли сборки сюда запостите


Название: Re: публичные переменные
Отправлено: GreatSnake от Май 11, 2011, 08:54
конечно сказанное GreatSnake звучит высокомерно и обидно (нехорошо клевать новичка)
Согласен, малость переборщил. Но, блин, спрашивал бы в соответстующих ветках форума, к нему бы и относились бы по-другому.
А то сразу в GUI...


Название: Re: публичные переменные
Отправлено: StatuS74 от Май 11, 2011, 08:54
mingw32-make: Leaving directory `C:/Qt/2010.05/test_adaptera-build-desktop'

debug/moc_connect_adaptera.o:C:\Qt\2010.05\test_adaptera-build-desktop/debug/moc_connect_adaptera.cpp:76: undefined reference to `connect_adaptera::on_pushButton_2_clicked()'

collect2: ld returned 1 exit status

mingw32-make[1]: *** [debug\test_adaptera.exe] Error 1

mingw32-make: *** [debug] Error 2

Процесс "C:/Qt/2010.05/mingw/bin/mingw32-make.exe" завершился с кодом %2.
Возникла ошибка при сборке проекта test_adaptera (цель: Настольный компьютер)
Во время выполнения сборки на этапе "Сборка"


Название: Re: публичные переменные
Отправлено: Nimbus от Май 11, 2011, 08:56
undefined reference to `connect_adaptera::on_pushButton_2_clicked()
Это значит, что этот метод у вас объявлен в .h, но в .cpp нет его реализации


Название: Re: публичные переменные
Отправлено: StatuS74 от Май 11, 2011, 09:00
а понял. это я перемудрил. кнопки сначало 2 было потом я удалил а не затер в слотах.

спасибо всем


Название: Re: публичные переменные
Отправлено: ieroglif от Май 11, 2011, 09:50
код класса
Код:
#ifndef CONNECT_ADAPTERAPN1444_H
#define CONNECT_ADAPTERAPN1444_H
#include <QWidget>
# include "qstring.h"
#include "ui_connect_adaptera.h"
namespace Ui {
    class connect_adaptera;
}
class connect_adaptera: public QWidget,public Ui::connect_adaptera
{
Q_OBJECT

public:
explicit connect_adaptera(QWidget* parent = 0);
~connect_adaptera();

public:
    Ui::connect_adaptera *ui_m;
    int bit; qulonglong speed; int stopBit; QString chetnost[10];

private slots:
    void on_pushButton_2_clicked();
    void on_pushButton_clicked();
};

QT_END_NAMESPACE
#endif // CONNECT_ADAPTERAPN1444_H
объяви каждую переменную с отдельной строки.
я уже не помню где меня это настигло, то ли в виндовом компиляторе, то ли в линуховом, но один из них никак не хотел воспринимать объявления нескольких переменных в одну строку.
кроме того:
1. # include "qstring.h"
просто #include <QString>
если подключаемый путь пишется в <> - то ищется в PATH, если в "" - то в директории проекта
2. QString chetnost[10]; - ты создаёшь массив из 10и QString-ов? или хочешь переменную типа QString длинной в 10 символов? если второе, то ты не прав =) QString - это Qt класс для строковых данных и длину ему указывать не обязательно =)

3.4.и т.д - уже просто из "рекомендаций"
объявляй все переменные в private или protected разделе. в public выноси get/set методы для каждой переменной. пусть это занимает какое-то время, зато код становится более... хм.. "правильным" =)
что у тебя происходит с классом? он у тебя и наследуется от Ui::connect_adaptera, содержит у себя объект Ui::connect_adaptera *ui_m; - это как? .. причём содержит в public разделе, а значит к нему сможет обратиться кто угодно.
опять же, из раздела "рекомендаций" - убери наследование, переведи переменную в private, и создай слоты/сигналы/методы для получения каких-то свойств из гуя. тем самым ты будешь предоставлять "наружу" не весь свой гуй, а только то, что от него надо, и это будет более безопасно - никакие другие объекты не смогут случайно сделать то, чего не надо.


Название: Re: публичные переменные
Отправлено: GreatSnake от Май 11, 2011, 09:54
Цитата: ieroglif
если подключаемый путь пишется в <> - то ищется в PATH, если в "" - то в директории проекта
Ну и зачем советуешь то, в чём сам не разбираешься?


Название: Re: публичные переменные
Отправлено: ieroglif от Май 11, 2011, 10:02
Цитата: ieroglif
если подключаемый путь пишется в <> - то ищется в PATH, если в "" - то в директории проекта
Ну и зачем советуешь то, в чём сам не разбираешься?
аааа.. ты всё необоснованно критикуешь  :) когда же уже начнёшь вместо критики и смуты вносить ясность?
я уж не знаю в чём я по твоему разбираюсь или не разбираюсь, но у меня работает именно так.
так что с необоснованной критикой можешь идти далеко и на долго.


Название: Re: публичные переменные
Отправлено: Пантер от Май 11, 2011, 10:04
Не в PATH ищет, а -I. И "" ищет сначала в директории проекта, а потом тоже в -I.

Хотя, может, я тоже не разбираюсь. ;)


Название: Re: публичные переменные
Отправлено: GreatSnake от Май 11, 2011, 10:06
Цитата: ieroglif
аааа.. ты всё необоснованно критикуешь  Улыбающийся когда же уже начнёшь вместо критики и смуты вносить ясность?
я уж не знаю в чём я по твоему разбираюсь или не разбираюсь, но у меня работает именно так.
так что с необоснованной критикой можешь идти далеко и на долго.
Ну что за народ ленивый и борзый пошел. Тебе сказали, что ты не прав. А ты не разобравшись начинаешь огрызаться.


Название: Re: публичные переменные
Отправлено: GreatSnake от Май 11, 2011, 10:09
Не в PATH ищет, а -I. И "" ищет сначала в директории проекта, а потом тоже в -I.

Хотя, может, я тоже не разбираюсь. ;)
Малость да ;)
В случае с "" сначала ищется в каталоге, где находится сам файл, из которого делается include.


Название: Re: публичные переменные
Отправлено: Пантер от Май 11, 2011, 10:12
Не в PATH ищет, а -I. И "" ищет сначала в директории проекта, а потом тоже в -I.

Хотя, может, я тоже не разбираюсь. ;)
Малость да ;)
В случае с "" сначала ищется в каталоге, где находится сам файл, из которого делается include.
Да, ты прав. Тут я что-то запамятовал.


Название: Re: публичные переменные
Отправлено: ieroglif от Май 11, 2011, 10:27
Цитата: ieroglif
аааа.. ты всё необоснованно критикуешь  Улыбающийся когда же уже начнёшь вместо критики и смуты вносить ясность?
я уж не знаю в чём я по твоему разбираюсь или не разбираюсь, но у меня работает именно так.
так что с необоснованной критикой можешь идти далеко и на долго.
Ну что за народ ленивый и борзый пошел. Тебе сказали, что ты не прав. А ты не разобравшись начинаешь огрызаться.

оффтоп: и не говори :) во народ пошёл - говорят "ты не прав" и никак это не обосновывают - что делать то? :)
а по фтопу ясно всё :)


Название: Re: публичные переменные
Отправлено: GreatSnake от Май 11, 2011, 10:35
Цитата: ieroglif
оффтоп: и не говори Улыбающийся во народ пошёл - говорят "ты не прав" и никак это не обосновывают - что делать то?
Ну, сначала усомниться в свой правоте и перепроверить свои знания, т.к. всё знать и помнить невозможно.
Коли и после этого всё ещё считаешь себя правым, то просто спрашиваешь.
Ведь серое вещество - вещь довольно-таки ленивая - его тренировать нужно иногда :)


Название: Re: публичные переменные
Отправлено: ieroglif от Май 11, 2011, 10:44
Цитата: ieroglif
оффтоп: и не говори Улыбающийся во народ пошёл - говорят "ты не прав" и никак это не обосновывают - что делать то?
Ну, сначала усомниться в свой правоте и перепроверить свои знания, т.к. всё знать и помнить невозможно.
Коли и после этого всё ещё считаешь себя правым, то просто спрашиваешь.
Ведь серое вещество - вещь довольно-таки ленивая - его тренировать нужно иногда :)
оффтоп: сам же догадываешься, сколько постоянно встречается людей, которые любят заявлять "ты не прав" :)
проверялка отвалится на перепроверках собственных сомнений навязанных окружающими :)
так что если когда мне говорят "ты не прав" - я просто считаю что человеку не важно донести до меня "истину" - а в таком случае зачем мне этого человека слушать? слушать я буду того (и задумываться над его словами) человека, который скажет "смотри, у меня вот такие и такие знания, так что я считаю что ты не прав" - тут мне видно, что человек хочет не просто выпендриться, а что-то реально до меня донести.


Название: Re: публичные переменные
Отправлено: Пантер от Май 11, 2011, 10:51
Перенесу я темку в говорилку, все равно ничего полезного. Надеюсь, ТС не против.


Название: Re: публичные переменные
Отправлено: Igors от Май 11, 2011, 11:17
Ну если уж "говорилка"  :)

Неоднократно замечал что знания, техника (ах, да, те же STL, boost и.т.п.) охотно демонстрируются на простых вещах - там где, в общем-то, что угодно пройдет. А вот когда хоть что-то "выше травы" (т.е. когда этого нет в том справочнике в который многие превратили свои головы) - так куда что девается, прямо воды в рот набирают  :)

Я не против знаний, всем приходится учиться/гуглить, мне тоже. Но переоценивать "запомненное"  не стоит