Форум программистов, компьютерный форум CyberForum.ru

Не могу объявить массив указателей на объект - C++

Восстановить пароль Регистрация
 
al-tracer-93
0 / 0 / 0
Регистрация: 23.11.2011
Сообщений: 20
23.11.2011, 00:47     Не могу объявить массив указателей на объект #1
Здравствуйте! Такой вопрос. При объявлении массива указателей на объект появляются 3 ошибки.
C++
1
2
3
4
5
6
7
8
9
10
11
12
void Cindex::merge(Ckey *A[], int l, int m, int r)
{
    int i, j;
    Ckey *Ax[r];
    for(i = m+1; i > l; i--) *Ax[i-1] = *A[i-1];
    for(j = m; j < r; j++) *Ax[r+m-j] = *A[j+1];
    for(int k(l); k <= r; k++)
        if(Ax[j]->Getoffset() < Ax[i]->Getoffset())
            *A[k] = *Ax[j--];
        else
            *A[k] = *Ax[i++];
}
Ошибки:
error C2057: требуется константное выражение
error C2466: невозможно выделить память для массива постоянного нулевого размера
error C2133: Ax: неизвестный размер
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2011, 00:47     Не могу объявить массив указателей на объект
Посмотрите здесь:

C++ Массив указателей не могу понять ошибку
Лист указателей на объект C++
C++ Как объявить массив указателей?
необходимо объявить массив указателей на функцию C++
C++ объявить массив указателей на функции-члены
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
23.11.2011, 00:59     Не могу объявить массив указателей на объект #2
Проблема в том, что крайне левой индекс массива должен быть константным выражением.
То есть в С++ такое объявление

C++
1
Ckey *Ax[r];
некорректно.

Такое объявление может компилироваться только для языка С, если компилятор поддерживает стандарт С99.
al-tracer-93
0 / 0 / 0
Регистрация: 23.11.2011
Сообщений: 20
23.11.2011, 01:06  [ТС]     Не могу объявить массив указателей на объект #3
Ошибки те же, такой вариант не подходит.((
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void Cindex::merge(Ckey *A[], int l, int m, int r)
{
    int i, j;
    const int p_r(r);
    Ckey *Ax[p_r];
    for(i = m+1; i > l; i--) *Ax[i-1] = *A[i-1];
    for(j = m; j < r; j++) *Ax[r+m-j] = *A[j+1];
    for(int k(l); k <= r; k++)
        if(Ax[j]->Getoffset() < Ax[i]->Getoffset())
            *A[k] = *Ax[j--];
        else
            *A[k] = *Ax[i++];
}
Сыроежка
Заблокирован
23.11.2011, 01:09     Не могу объявить массив указателей на объект #4
al-tracer-93,

Вы, вообще-то, читаете, что вам другие пишут?!!! Или вы тихо сами с собой общаетесь?!!! Я вам уже сказал, что размерность массива должна быть задана с помощью константного выражения, известного на этапе уомпиляции программы!
al-tracer-93
0 / 0 / 0
Регистрация: 23.11.2011
Сообщений: 20
23.11.2011, 01:15  [ТС]     Не могу объявить массив указателей на объект #5
Но мне нужно объявить массив такого же размера, что и передаваемый в функцию.
Сыроежка
Заблокирован
23.11.2011, 01:17     Не могу объявить массив указателей на объект #6
Цитата Сообщение от al-tracer-93 Посмотреть сообщение
Но мне нужно объявить массив такого же размера, что и передаваемый в функцию.
В С++ это невозможно сделать. Но можно выделить память из кучи под массив с помощью оператора new

Вы лучше расскажите, что вам надо сделать в этой функции?
al-tracer-93
0 / 0 / 0
Регистрация: 23.11.2011
Сообщений: 20
23.11.2011, 01:30  [ТС]     Не могу объявить массив указателей на объект #7
Я пытаюсь реализовать функцию сортировки слиянием. Собственно эта функция и есть сортировка+слияние.
Сыроежка
Заблокирован
23.11.2011, 01:56     Не могу объявить массив указателей на объект #8
Цитата Сообщение от al-tracer-93 Посмотреть сообщение
Я пытаюсь реализовать функцию сортировки слиянием. Собственно эта функция и есть сортировка+слияние.
То есть вам надо отсортировать исходный массив. Правтильно? Причем массив указателей (так у вас задано в объявлении функции). Для этого вам нужен временный массив, равный по размерности исходному массиву. Так?
Ну тогда создавайте временный массив с помощью оператора new [], а при выходе из функции удалйте его с помощью оператора delete []
al-tracer-93
0 / 0 / 0
Регистрация: 23.11.2011
Сообщений: 20
23.11.2011, 02:10  [ТС]     Не могу объявить массив указателей на объект #9
Спасибо. Ошибки исправил.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void Cindex::merge(Ckey *A[], int l, int m, int r)
{
    int i, j;
    const int p_r(r);
    Ckey *Ax = new Ckey[p_r];
    for(i = m+1; i > l; i--) *(Ax +(i-1)) = *A[i-1];
    for(j = m; j < r; j++) *(Ax+(r+m-j)) = *A[j+1];
    for(int k(l); k <= r; k++)
        if((Ax+j)->Getoffset() < (Ax+i)->Getoffset())
            *A[k] = *(Ax+j--);
        else
            *A[k] = *(Ax+i++);
}
Сыроежка
Заблокирован
23.11.2011, 02:30     Не могу объявить массив указателей на объект #10
al-tracer-93,

Вы только забыли в конце функции вызвать оператор delete[]. В противном случае без этого оператора у вас будет постоянно происходить утечка памяти при многократных вызовах функции.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2011, 02:42     Не могу объявить массив указателей на объект
Еще ссылки по теме:

Классы. Объявить массив динамически и сделать указатель на объект в динамической памяти C++
Не могу объявить массив внутри main - ошибка при линковке C++
C++ Объявить массив? Запросто! Объявить массив массивов? А как это?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
al-tracer-93
0 / 0 / 0
Регистрация: 23.11.2011
Сообщений: 20
23.11.2011, 02:42  [ТС]     Не могу объявить массив указателей на объект #11
Благодарю. Не предусмотрел.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Cindex::merge(Ckey *A[], int l, int m, int r)
{
    int i, j;
    const int p_r(r);
    Ckey *Ax = new Ckey[p_r];
    for(i = m+1; i > l; i--) *(Ax +(i-1)) = *A[i-1];
    for(j = m; j < r; j++) *(Ax+(r+m-j)) = *A[j+1];
    for(int k(l); k <= r; k++)
        if((Ax+j)->Getoffset() < (Ax+i)->Getoffset())
            *A[k] = *(Ax+j--);
        else
            *A[k] = *(Ax+i++);
    delete []Ax;
}
Yandex
Объявления
23.11.2011, 02:42     Не могу объявить массив указателей на объект
Ответ Создать тему
Опции темы

Текущее время: 11:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru