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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Многомерныq вложенный массив с использование QList  (Прочитано 4333 раз)
alik
Гость
« : Февраль 24, 2015, 15:41 »

Всем добрый день, я новичок и не могу понять как решить следующую заковырьку:

Имеется базовый тип-структура TCloudData , на основе которого с помощью QList создается динамический массив TCloudData_1D.
Далее на основе TCloudData_1D создается массив TSeasonContours с количеством элементов COUNT_SEASONS = 4 из структуры TSeasons.
В Header файле все нормально (нет шибок компилятора), а в CPP файле я не могу понять как использовать переменную типа
TSeasonContours Contours. Все вложенные поля Contours не видны.
Не проходит ничего: Contours[1], Contours[1,1], Contours-> , ...
Что я делаю не так ?


struct TCloudData {
    int No;                             
    float bVxyz_km;                   
    int CountPoints;                   
};

typedef QList<TCloudData> TCloudData_1D;

enum TSeasons {
     wpSummer = 0,                         
     wpWinter = 1,                 
     wpSpring = 2,                   
     wpAutumn = 3,
     COUNT_SEASONS = 4
     };

typedef TCloudData_1D TSeasonContours[COUNT_SEASONS ];

TSeasonContours Contours;           


Contours[]. Непонимающий

Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #1 : Февраль 24, 2015, 16:31 »

А что сложного? Код
Код:
Contours[0]
возвращает объект типа QList<TCloudData>
Код
Код:
Contours[0][0]
возвращает  объект типа TCloudData.
Код
Код:
Contours[0][0].No
даёт доступ к полю данного объекта.
Записан
alik
Гость
« Ответ #2 : Февраль 24, 2015, 16:43 »

А что сложного? Код
Код:
Contours[0]
возвращает объект типа QList<TCloudData>
Код
Код:
Contours[0][0]
возвращает  объект типа TCloudData.
Код
Код:
Contours[0][0].No
даёт доступ к полю данного объекта.

А почему тогда не работает вызовs типа Contours[0].clear, Contours[0].count и т.д. Непонимающий
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Февраль 24, 2015, 16:43 »

Все 4 массива пустые (содержат 0 элементов). Чтобы что-то увидеть нужно сначала заполнить их, напр так
Код
C++ (Qt)
Contours[0].push_back(TCloudData());

возвращает ...
..
возвращает  ..
Этого термина начинающие часто не понимают (но стесняются спросить). Кто кому "возвращает"? Что он брал а потом отдает?  Улыбающийся
Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #4 : Февраль 24, 2015, 17:00 »

А почему тогда не работает вызовs типа Contours[0].clear, Contours[0].count и т.д. Непонимающий

Этот код работает. Вот такой пример у меня работает:

Код:
#include <QList>

struct TCloudData {
int No;
float bVxyz_km;
int CountPoints;
};

typedef QList<TCloudData> TCloudData_1D;

enum TSeasons {
wpSummer = 0,
wpWinter = 1,
wpSpring = 2,
wpAutumn = 3,
COUNT_SEASONS = 4
};

typedef TCloudData_1D TSeasonContours[COUNT_SEASONS];


int main(int argc, char *argv[]){
        // создаём массив списков
TSeasonContours Contours;
       
        // запрашиваем размер первого списка, он создан, но пуст
qDebug() << Contours[0].count();

        // добавляем два элемента в первый список
TCloudData t = {1, 1.0f, 1};
Contours[0].push_back(t);

t = {2, 2.0f, 2};
Contours[0].push_back(t);

        // запрашиваем новый размер первого списка
qDebug() << Contours[0].size() << "\n";

return 0;
}

Если у вас не работает метод count, то проблема где-то в другом месте.

Этого термина начинающие часто не понимают (но стесняются спросить). Кто кому "возвращает"? Что он брал а потом отдает?  Улыбающийся
Ну это общепринятый термин. Не знаю, как по-другому выразиться.
Записан
alik
Гость
« Ответ #5 : Февраль 24, 2015, 17:24 »

А почему тогда не работает вызовs типа Contours[0].clear, Contours[0].count и т.д. Непонимающий

Этот код работает. Вот такой пример у меня работает:

Код:
#include <QList>

struct TCloudData {
int No;
float bVxyz_km;
int CountPoints;
};

typedef QList<TCloudData> TCloudData_1D;

enum TSeasons {
wpSummer = 0,
wpWinter = 1,
wpSpring = 2,
wpAutumn = 3,
COUNT_SEASONS = 4
};

typedef TCloudData_1D TSeasonContours[COUNT_SEASONS];


int main(int argc, char *argv[]){
        // создаём массив списков
TSeasonContours Contours;
       
        // запрашиваем размер первого списка, он создан, но пуст
qDebug() << Contours[0].count();

        // добавляем два элемента в первый список
TCloudData t = {1, 1.0f, 1};
Contours[0].push_back(t);

t = {2, 2.0f, 2};
Contours[0].push_back(t);

        // запрашиваем новый размер первого списка
qDebug() << Contours[0].size() << "\n";

return 0;
}

Если у вас не работает метод count, то проблема где-то в другом месте.

Этого термина начинающие часто не понимают (но стесняются спросить). Кто кому "возвращает"? Что он брал а потом отдает?  Улыбающийся
Ну это общепринятый термин. Не знаю, как по-другому выразиться.

При попытке вызвать в конце программы
Contours[0].clear компилятор выдает ошибку statemnet cannot resolve address of overloaded function
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #6 : Февраль 24, 2015, 17:32 »

При попытке вызвать в конце программы
Contours[0].clear компилятор выдает ошибку statemnet cannot resolve address of overloaded function
Вы прямо так вызываете?
Скобки не забыли?
Код
C++ (Qt)
Contours[0].clear();
 
Записан
alik
Гость
« Ответ #7 : Февраль 24, 2015, 17:37 »

При попытке вызвать в конце программы
Contours[0].clear компилятор выдает ошибку statemnet cannot resolve address of overloaded function
Вы прямо так вызываете?
Скобки не забыли?
Код
C++ (Qt)
Contours[0].clear();
 

Да со скобками работает clear() !
Но почему в редакторе кода после набора Contours[0] не появляется список доступных для типа TCloudData_1D переменных и методов ?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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