crossplatform.ru

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

kvak
  опции профиля:
сообщение 6.9.2010, 12:47
Сообщение #1


Студент
*

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

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




Репутация:   0  


Здравствуйте. Вопрос касается двумерных массивов.
Стандартного и QVector
Мне нужно, чтобы массив стал общедоступен внутри всех функций моего класса.

1.
В файле header.h объявляю массив

int order_id[12][6];

В файле order.cpp, который подключает мой header.h
пытаюсь инициализировать массив.
order_id[12][6] ={
{0, 0, 0, 1, 0, 2},
//.........и так далее
};
--------
компилятор выдает ошибку. Лишь когда я в файле order.cpp сразу объявляю и инициализирую массив, то
все получается. Но тогда я не смогу его использовать как данное-член моего класса. Как быть ?

2. Второй вопрос касается двумерного массива QVector
В файле header.h объявляю двемерный массив QVector.


В файле order.cpp мне надо выполнить функцию resize, чтобы массив стал 12 на 6. Не получается с двумя

переменными. Как это можно сделать ?
Также насчет заполнения QVector. Также как я это делал со стандартным массивом. тут не получается.
Заполнять QVector обращаюсь к каждомй индексу это единственный способ его заполнить ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Алексей1153
  опции профиля:
сообщение 6.9.2010, 19:38
Сообщение #2


фрилансер
******

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

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




Репутация:   34  


попробую более развёрнуто

инициализировать массив можно можно так
class A
{
    int m_order[12][6];
    
    A()
    {
        static int templ_order[3][6]={{1,2,3,4,5,6},{11,12,13,14,15,16},{21,22,23,24,25,26}};
        
        //1)
        memmove(m_order,templ_order,min(sizeof(m_order),sizeof(templ_order)));
        
        //2) или так
        m_order[0][0]=1;
        m_order[0][1]=2;
        m_order[0][2]=4;
        //....
        
        //3) или из файла
        //...
    }
};


обрати внимание на важную деталь: массив с данными для инициализации в конструкторе объявлен как static. Таким образом, массив располагается не в стеке функции и инициализируетсяч всего один раз. А вот копирование из него в массив класса будет происходить в каждом конструкторе

Цитата
Так как сделать resize для двумерного QVector. Покажите код, если такая функция работает и для двумерного.

2+3. QVector я не пользовался, но сделаешь по аналогии ) Для начала скажу, что двумерных векторов не бывает.

class A
{
    typedef int td_int;//на всякий случай сделаем синоним типу, так как важно не пролететь с длиной массива
    
    std::vector<td_int> v;
    
public:    
    A()
    {
        static td_int templ_order[3][6]={{1,2,3,4,5,6},{11,12,13,14,15,16},{21,22,23,24,25,26}};
        
        //v.clear(); //сейчас вектор пуст, как-будто выполнили эту функцию
        
        //копируем
        v.insert(
                v.end(),
                (td_int*)templ_order,
                (td_int*)templ_order+sizeof(templ_order)/sizeof(td_int));
    }
};


Сообщение отредактировал Алексей1153 - 6.9.2010, 19:39
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 7.5.2025, 10:12