crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Ошибка с appendChild
ruzik
  опции профиля:
сообщение 10.2.2012, 14:31
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 254
Регистрация: 23.2.2011
Из: Саратов
Пользователь №: 2436

Спасибо сказали: 2 раз(а)




Репутация:   0  


Здравствуйте, почему я не могу сделать так:
        QDomElement folder;
            node.appendChild(folder);

Мне выдает ошибку

Ошибка 1 error C2662: QDomNode::appendChild: невозможно преобразовать указатель 'this' из 'const QDomNode' в 'QDomNode &' c:\Users\ruzik\Documents\Visual Studio 2008\Projects\RizekFaster\RizekFaster\rizekfaster.cpp 100

Хотя все должно работать правильно
Заранее спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 10.2.2012, 14:39
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


код в студию, естественно, что для константного объекта получить не константную ссылку "честным" способом нельзя.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ruzik
  опции профиля:
сообщение 10.2.2012, 15:48
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 254
Регистрация: 23.2.2011
Из: Саратов
Пользователь №: 2436

Спасибо сказали: 2 раз(а)




Репутация:   0  


Вот нужный код:
void RizekFaster::saveData()
{
    QDomDocument doc("data");
    QDomElement domElement = doc.createElement("data");
    saveNode(domElement);
    doc.appendChild(domElement);
}
void RizekFaster::saveNode(const QDomNode& node, QModelIndex& index)
{
    for (int a=0;a<itemModel->rowCount(index);a++)
    {
        //If it is folder
        if(itemModel->item(a,0)->hasChildren())
        {
            QDomElement folder;
            folder.setAttribute("name",node.toElement().text());
            node.appendChild(folder);

            QModelIndex newIndex = itemModel->index(a,0,index);
            saveNode(folder,newIndex);
        }
        //If it is item
        //if(!itemModel->item(a,0)->hasChildren())
        else
        {
            QDomElement item;
            item.setNodeValue(node.toElement().text());
            node.appendChild(item);
        }
    }
}

Цитата
код в студию, естественно, что для константного объекта получить не константную ссылку "честным" способом нельзя.

Да, но если я не ошибаюсь, то все наоборот: я отправляю неконстантный объект, который преобразуется в функции в константную ссылку, что вроде как норма
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 10.2.2012, 16:51
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Цитата(ruzik @ 10.2.2012, 16:48) *
Вот нужный код:
void RizekFaster::saveNode(const QDomNode& node, QModelIndex& index)
{
    for (int a=0;a<itemModel->rowCount(index);a++)
    {
        //If it is folder
        if(itemModel->item(a,0)->hasChildren())
        {
            QDomElement folder;
            folder.setAttribute("name",node.toElement().text());
            node.appendChild(folder);//ПОПЫТКА МОДИФИЦИРОВАТЬ КОНСТАНТНЫЙ ОБЪЕКТ НЕ КОНСТАНТНЫМ МЕТОДОМ

            QModelIndex newIndex = itemModel->index(a,0,index);
            saveNode(folder,newIndex);
        }
        //If it is item
        //if(!itemModel->item(a,0)->hasChildren())
        else
        {
            QDomElement item;
            item.setNodeValue(node.toElement().text());
            node.appendChild(item);//ПОПЫТКА МОДИФИЦИРОВАТЬ КОНСТАНТНЫЙ ОБЪЕКТ НЕ КОНСТАНТНЫМ МЕТОДОМ
        }
    }
}

Да, но если я не ошибаюсь, то все наоборот: я отправляю неконстантный объект, который преобразуется в функции в константную ссылку, что вроде как норма



передавай не "const QDomNode& node" а "QDomNode& node"
функция должна выглядеть так:
void RizekFaster::saveNode(QDomNode& node, QModelIndex& index)
{
....
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 10.2.2012, 16:54
Сообщение #5





Гости








    


В Qt все что унаследованно от QDomNode при копировании использует политику copy on write, поэтому можно забить на ссылки и вполне спокойно передавать параметры по значению.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ruzik
  опции профиля:
сообщение 10.2.2012, 16:55
Сообщение #6


Активный участник
***

Группа: Участник
Сообщений: 254
Регистрация: 23.2.2011
Из: Саратов
Пользователь №: 2436

Спасибо сказали: 2 раз(а)




Репутация:   0  


Спасибо за помощь!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 10.2.2012, 16:55
Сообщение #7


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Цитата(Гость @ 10.2.2012, 17:54) *
В Qt все что унаследованно от QDomNode при копировании использует политику copy on write, поэтому можно забить на ссылки и вполне спокойно передавать параметры по значению.

Видимо ты не совсем понимаешь смысла ссылки в данном коде.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 10.2.2012, 19:37
Сообщение #8





Гости








    


А, пардон, не доглядел.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.4.2024, 6:54