Russian Qt Forum
Ноябрь 23, 2024, 11:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: О чем предупреждает Qt?  (Прочитано 13522 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #15 : Сентябрь 09, 2013, 13:15 »

Код
C++ (Qt)
friend bool operator == (const BigInt &, const BigInt &);
Записан
Alexu007
Гость
« Ответ #16 : Сентябрь 09, 2013, 20:05 »

До переопределения операторов ещё не дошёл пока. Как то нестабильно оно работает...

файл bigintdec.h:

Код
C++ (Qt)
#ifndef BIGINTDEC_H
#define BIGINTDEC_H
 
#include "widget.h"
 
 
 
#define osn 10
#define maxlen 512
 
 
class BI
   {
   public:
 
       int amount;              // количество цифр в числе
       int digits[maxlen];      // массив цифр в обратном порядке
 
 
//   BI input(const QString);
//   QString output(BI);
 
 
       BI input(const QString st)
           {
 
           QString s1;
           int pos = 0;
           BI bgi;
 
           memset(bgi.digits, 0, sizeof(bgi.digits));
 
           for(int i = st.length() - 1; i >= 0 ; i--)
               {
               s1 = st[i];
               bgi.digits[pos++] = s1.toInt();
               }
 
           bgi.amount = st.length();
 
           return bgi;
           };
 
 
 
 
       QString output(const BI bdi)
           {
           QString str;
 
           for (int i= bdi.amount - 1; i >= 0; i--)
               {
               str += QString::number(bdi.digits[i],'g',6);
               }
 
           return str;
           };
 
 
};
 
#endif // BIGINTDEC_H

файл widget.cpp:

Код
C++ (Qt)
void Widget::MyEventHandler1()
{
   /*
   QString x = sender()->objectName();
   fnpresskey(x.remove(0, 11).toInt());
   */

 
   QString str = "00112233";
 
   BI bdj1;
   BI bdj2;
 
   bdj1 = bdj1.input(str);
 
   bdj2 = bdj1;
 
   ui->lineEdit_3->setText(bdj2.output(bdj2));
 
   return;

Так всё работает, но если перенести реализацию функций-членов в файл bigintdec.срр, а в объявлении класса оставить прототипы, и пересобрать проект - вылезает 3 ошибки:

C:\QtSDK\Alexu007\LongArifm\LA1\widget.cpp:140: ошибка: undefined reference to `BI::input(QString)'

C:\QtSDK\Alexu007\LongArifm\LA1\widget.cpp:144: ошибка: undefined reference to `BI::output(BI)'

:-1: ошибка: collect2: ld returned 1 exit status (внизу красными буквами "файл не найден").

Чё за фигня, файл не найден, как я понимаю - bigintdec.срр, оттуда реализации функций теряются - но он к проекту подключён...
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #17 : Сентябрь 09, 2013, 20:32 »

При переносе в cpp название класса перед названием функций добавить не забыли?
Записан
Alexu007
Гость
« Ответ #18 : Сентябрь 09, 2013, 20:53 »

При переносе в cpp название класса перед названием функций добавить не забыли?
Забыл. Спасибо. Заработало. Ну геморой!!!

Ещё вопросик, пжалста. При использовании в программе перед каждым вызовом функции-члена указывается вызывающий её объект (я с этим долго тормозил, никак понять не мог, чего ещё от меня хотят...):

Цитировать
   BI bdj1;
    BI bdj2;
 
    bdj1 = bdj1.input(str);
 
    bdj2 = bdj1;
 
    ui->lineEdit_3->setText(bdj2.output(bdj2));

Это значит для каждой копии объекта свои копии функций создаются, что-ли? Если-бы вызывались, например BI.input() - то понятно, функция input класса BI - но так не работает, а нафига перед каждой функцией название её объекта? А если объекты в цикле создаются сотнями, как к ним в программе обращаться?
« Последнее редактирование: Сентябрь 09, 2013, 20:54 от Alexu007 » Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #19 : Сентябрь 09, 2013, 21:03 »

а нафига перед каждой функцией название её объекта?

Начни уже учить С++, сколько ты ещё будешь задавать вопросы, о которых написано в любой обучающей книжке для начинающих?
Записан
Alexu007
Гость
« Ответ #20 : Сентябрь 11, 2013, 16:52 »

Как получить код символа QString?  QString str = "12AB";  Нужно каждый символ в int перевести: "1" = 1, "A" = 10 и т.д.





Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #21 : Сентябрь 11, 2013, 17:57 »

Код:
for(int i = 0; i < str.size(); i++)
{
   QChar c = str.at(i);
   qDebug() << (int)c.toAscii();
}

Или вы про перевод в другую систему счисления?
тогда,
Код:
bool b;
int number = str.toInt(&b, 16);
if(b)
  qDebug() << "удачно!";
else
  qDebug() << "что то не получилось...";
« Последнее редактирование: Сентябрь 11, 2013, 18:39 от gil9red » Записан

Alexu007
Гость
« Ответ #22 : Сентябрь 11, 2013, 21:20 »

Спасиб, наверху то что надо. Мне не нужен авт. перевод в hex, нужно брать число по одной цифре(букве) и помещать в инт:  1 - 1, 9 -9, А - 10 и т.д.

Прога работает с dec, хочу "приучить её и к hex.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #23 : Сентябрь 13, 2013, 20:42 »

Alexu007, ты сделал функцию членом класса, стало быть один аргумент функции уже появился - объект (экземпляр этого класса).
т.е. убери "левый" аргумент (им будет экземпляр класса) в теле функуии вместо него используй указатель this.

либо, сделай функцию дружественной данному классу, тогда можешь всё оставить как есть.

И, к стати, операторы типа "+" (не "+=") следует делать константными

Книжку могу порекомендовать: Герб Саттер и Андрей Александреску "Стандарты программирования на С++"
Записан

Юра.
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #24 : Сентябрь 13, 2013, 20:43 »

чёт я запоздал с ответом Улыбающийся
Записан

Юра.
Bepec
Гость
« Ответ #25 : Сентябрь 14, 2013, 10:09 »

Вторая страница всегда незаметна Улыбающийся С каждым бывает.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.168 секунд. Запросов: 23.