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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Константные функции  (Прочитано 3965 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« : Март 18, 2014, 14:19 »

Код
C++ (Qt)
 
struct TekValOUT_SBU
{
       float tec_value_sbu_1;
       float tec_value_sbu_2;
       float tec_value_sbu_3;
 
       float tec_value_sbu_4;
       float tec_value_sbu_5;
       float tec_value_sbu_6;
 
       char tec_value_sbu_7[8];    
};
 
class ListModelBrowser: public QAbstractItemModel
{
   Q_OBJECT
 
public:
   explicit ListModelBrowser(QObject*parent = 0);
   virtual ~ListModelBrowser();
   QString stroka(char *);
 
public:
   int columnCount(const QModelIndex &parent) const;
   int rowCount(const QModelIndex &index) const;
   QVariant data(const QModelIndex &index, int role) const;
   QModelIndex index(int row, int column, const QModelIndex &parent) const;
   QModelIndex parent(const QModelIndex &child) const;
//    bool setData(const QModelIndex &index, const QVariant &value, int role);
   Qt::ItemFlags flags(const QModelIndex &index) const;
   QVariant headerData(int section, Qt::Orientation orientation, int role) const;
//!!!    void initRoot(QObject*);
 
public Q_SLOTS:
   void setRoot(QModelIndex);
   void initRoot(QObject*);
 
public:
   QObject*root;
};
 
QVariant ListModelBrowser::data(const QModelIndex &index, int role) const
{
       if (index.column() == 3 && (QVariant(element->metaObject()->className())).toString() == "Preference" )
       {
           Preference *pref = dynamic_cast<Preference*>(element);
           Function *function = (Function*)(pref->pointFunction);
           if(function->typeFunction == Monitoring)
           {
               if(index.column() == 3)
               {
                   Device *device = (Device*)(function->parent());
                   switch(index.row())
                   {
                   case 0: return device->tvOBuf.tec_value_sbu_1;
                   case 1: return device->tvOBuf.tec_value_sbu_2;
                   case 2: return device->tvOBuf.tec_value_sbu_3;
                   case 3: return device->tvOBuf.tec_value_sbu_4;
                   case 4: return device->tvOBuf.tec_value_sbu_5;
                   case 5: return device->tvOBuf.tec_value_sbu_6;
                   case 6: return stroka((device->tvOBuf).tec_value_sbu_7);    //!!!!!!!!!Ошибка????????????          
                   default:
                       break;
                   }                
               }
           }    
return QVariant();    
}
 
QString ListModelBrowser::stroka(char *data)
{
   QString outStr;
   char strBufHex[8];
 
   for(int i = 0; i<8; i++)
   {
       ::sprintf(strBufHex,"%d",(unsigned char)(data[i]));
       outStr.append(strBufHex);
   }
   return outStr;
}
 

При компиляции выдается ошибка
Код:
error: passing 'const ListModelBrowser' as 'this' argument of 'QString ListModelBrowser::stroka(char*)' discards qualifiers


« Последнее редактирование: Март 18, 2014, 14:25 от demaker » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Март 18, 2014, 14:25 »

Объявите метод stroka константным или не делайте его вообще членом этого класса.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #2 : Март 18, 2014, 14:26 »

Объявите метод stroka константным или не делайте его вообще членом этого класса.

Объявлял метод константным,но не помогло
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Март 18, 2014, 14:27 »

Делал но не помогло
Не может быть.
Как делали?
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #4 : Март 18, 2014, 14:33 »

Код
C++ (Qt)
 
QString stroka(char *) const;
 
 
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #5 : Март 18, 2014, 14:37 »

Код
C++ (Qt)
QString stroka(char *) const;
 
А что за ошибки были после этого?
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #6 : Март 18, 2014, 14:38 »

Код:
.\input\ModelView\ListModelBrowser.cpp:86: error: prototype for 'QString ListModelBrowser::stroka(char*)' does not match any in class 'ListModelBrowser'
..\input\ModelView\/ListModelBrowser.h:16: error: candidate is: QString ListModelBrowser::stroka(char*) const
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #7 : Март 18, 2014, 14:39 »

Код:
.\input\ModelView\ListModelBrowser.cpp:86: error: prototype for 'QString ListModelBrowser::stroka(char*)' does not match any in class 'ListModelBrowser'
..\input\ModelView\/ListModelBrowser.h:16: error: candidate is: QString ListModelBrowser::stroka(char*) const
Ну так в cpp нужно тоже const добавить.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #8 : Март 18, 2014, 14:40 »

Извините забыл в срр-файле const
Спасибо
Записан
OKTA
Гость
« Ответ #9 : Март 18, 2014, 14:40 »

Всему виной использование неконстантного метода внутри константного?
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #10 : Март 19, 2014, 12:22 »

Всему виной использование неконстантного метода внутри константного?

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


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