crossplatform.ru

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

> Что я не так делаю с указателями?
Shaitan
  опции профиля:
сообщение 26.8.2015, 19:33
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 22.7.2015
Пользователь №: 4418

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




Репутация:   0  


Добрый день.
Решил написать небоьшую программу, которая будет читать данные из тектового файла. Данные представляют собой простой список. Id, Name, Field1,Field2.
Для начало создал свою структуру:
struct RElement
{
    int     id;
    QString *name;
    int     field1;// const;
    int     field2;// const;
};


После Запускается функция в которую передаю Список обработанных строк.
Этот список я разбиваю на группы. Группы разделенв ";". Каждую группу я записываю в промежуточный список.
void runCode(QStringList     _strList)
{
    QStringList         strListLine,strListLineSend;
    QList <RElement>   codeList;
    RRElement           rVar;

    foreach(QString str, _strList)
    {
        strListLine.append(str.toLower());
        if(str == ";")
        {
            runLineCode(&codeList,strListLine);//запускаем функцию
            strListLine.clear();
        }
    }

    while(codeList.count() > 0);//oisEmpty())
    {
        rVar = codeList.takeFirst();
        delete &rVar;
    }
}


Этот Список передаю в процедуру создание списка указателей структур.
По возвращению из неё пытаюсь очищать промежуточный список. И тут у меня лезут ошибки
void runLineCode(QList <RElement> *listCode,
                 QStringList     _strList)
{
    int         i = 0,leght;
    int         id = 1;
    int         typeVar;
    QString     nameTypeVar = "";
    QString     typeNameStr;
    char        ch;
    RElement   *var;

    if((_strList[i] == "point")||(_strList[i] == "poligon")||(_strList[i] == "line"))
    {
        if((_strList[i] != "=")||(_strList[i] != ".")||(_strList[i] != ",")||(_strList[i] != ":"))
        {
            nameTypeVar = _strList[i];
            if(nameTypeVar == "point")
                typeVar = 1;
            else
                if(nameTypeVar == "poligon")
                    typeVar = 2;
                else
                    if(nameTypeVar == "line")
                        typeVar = 3;
            i++;
        }
    }

    if((typeVar > 0) && (i > 0))
    {
        leght = _strList.length() - i;
        while(leght >= i && _strList[i] != ";")
        {
            if(_strList[i] != ",")
            {
                var->id = id;
                var->type = typeVar;
                var->field1 = 1;
                var->field2 = 0;
                listCode->append(*var);
                id++;
                var = var + 1;
            }
            i++;
        }
    }
}


Если в фунции не создавать указатель на структуру, то промежуточный список нормально очищается.
Что я не так делаю?
Заранее спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
lanz
  опции профиля:
сообщение 29.8.2015, 0:10
Сообщение #2


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

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

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




Репутация:   8  


    if((_strList[i] == "point")||(_strList[i] == "poligon")||(_strList[i] == "line"))
    {
        if((_strList[i] != "=")||(_strList[i] != ".")||(_strList[i] != ",")||(_strList[i] != ":"))
        {

Это условие вообще лишнее, поскольку мы уже знаем, что _strList[i] это point, line или polygon.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




RSS Текстовая версия Сейчас: 3.3.2021, 11:29