Russian Qt Forum

Qt => Вопросы новичков => Тема начата: demaker от Марта 18, 2014, 14:19



Название: Константные функции
Отправлено: demaker от Марта 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




Название: Re: Константные функции
Отправлено: Old от Марта 18, 2014, 14:25
Объявите метод stroka константным или не делайте его вообще членом этого класса.


Название: Re: Константные функции
Отправлено: demaker от Марта 18, 2014, 14:26
Объявите метод stroka константным или не делайте его вообще членом этого класса.

Объявлял метод константным,но не помогло


Название: Re: Константные функции
Отправлено: Old от Марта 18, 2014, 14:27
Делал но не помогло
Не может быть.
Как делали?


Название: Re: Константные функции
Отправлено: demaker от Марта 18, 2014, 14:33
Код
C++ (Qt)
 
QString stroka(char *) const;
 
 


Название: Re: Константные функции
Отправлено: Old от Марта 18, 2014, 14:37
Код
C++ (Qt)
QString stroka(char *) const;
 
А что за ошибки были после этого?


Название: Re: Константные функции
Отправлено: demaker от Марта 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


Название: Re: Константные функции
Отправлено: Old от Марта 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 добавить.


Название: Re: Константные функции
Отправлено: demaker от Марта 18, 2014, 14:40
Извините забыл в срр-файле const
Спасибо


Название: Re: Константные функции
Отправлено: OKTA от Марта 18, 2014, 14:40
Всему виной использование неконстантного метода внутри константного?


Название: Re: Константные функции
Отправлено: demaker от Марта 19, 2014, 12:22
Всему виной использование неконстантного метода внутри константного?

Думаю что да :)