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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QMap добавление указателей  (Прочитано 3485 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« : Июнь 03, 2009, 10:52 »

Доброго дня!

Подскажите, как добавить в QMap указатель на вновь созданный объект.

Делаю так:

Код:
....
....
QMap<int, TRegister *> reg0xMap;
....
TRegister *reg;
reg=NULL;
reg = new TRegister(rtype, raddr, 0);
...
       ...
reg0xMap[(int)raddr] = reg; // тут строка 272
 ...

а мне компилятор пишет:
Цитировать
....
modbuscontroller.cpp:272: error: non-lvalue in assignment
....
Записан

ArchLinux x86_64 / Win10 64 bit
mugabe
Гость
« Ответ #1 : Июнь 03, 2009, 10:56 »

это все в одной функции?
или совсем так случайно 272-ая строка оказалась в константной функции класса?
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Июнь 03, 2009, 11:24 »

Ну,
Код:
QMap<int, TRegister *> reg0xMap;
определена в приватной секции заголовочного файла класса

а все остальное выполняется тут:
Код:
bool TModbusController::createReg(TRegisterType rtype, quint16 raddr) const
{
//проверяем есть ли уже такой регистр с адресом
if (findRegAddr(rtype, raddr)) return false;

TRegister *reg;
reg=NULL;
reg = new TRegister(rtype, raddr, 0);

switch (rtype) {
case Reg_0x:
reg0xMap.insert(raddr, reg); //строка 272 (тут уже я изменил с reg0xMap[(int)raddr] = reg ) и т.п.
break;
case Reg_1x:
reg1xMap.insert(raddr, reg);
break;
case Reg_3x:
reg3xMap.insert(raddr, reg);
break;
case Reg_4x:
reg4xMap.insert(raddr, reg);
break;
case Reg_6x:
reg6xMap.insert(raddr, reg);
break;
default: return false;
}
reg=NULL;
return true;
}

ну ф-я createReg объявлена как константная.. и чо делать?
Записан

ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Июнь 03, 2009, 11:26 »

все, решено.. сам понял касяк.. нужно убрать слово const Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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