Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
al-tracer-93
0 / 0 / 0
Регистрация: 23.11.2011
Сообщений: 20
#1

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

23.11.2011, 00:47. Просмотров 1071. Ответов 10
Метки нет (Все метки)

Здравствуйте! Такой вопрос. При объявлении массива указателей на объект появляются 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: неизвестный размер
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2011, 00:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не могу объявить массив указателей на объект (C++):

Как объявить массив указателей? - C++
Напишите объявление переменной - одномерного массива StringArray указателей на символы длины N.

Как объявить массив указателей на функции? - C++
с юморком, для смелых)) Как объявить массив указателей на функции, возвращающие указатели на массив указателив на строкы?

Объявить массив указателей на функции-члены - C++
Надо объявить массив theArray из 10 указателей на функции-члены класса Car, получающие параметр типа int и возвращающие значения типа long....

необходимо объявить массив указателей на функцию - C++
которая (например) ничё не принимает и возвращает, допустим, значение типа int. Спасибо, кто откликнется.

Классы. Объявить массив динамически и сделать указатель на объект в динамической памяти - C++
Я создал классы: ПЕРСОНА, служащий, роботодатель, инженер. Но мне нужно в программе (после int main() 69 строка) объявить массив...

Не могу объявить массив внутри main - ошибка при линковке - C++
Доброго времени суток! Я начинающий в С++. Использую gcc в Ubuntu 13.04 x64 bit. Прохожу сейчас массивы. Заметил одну странность....

10
Сыроежка
Заблокирован
23.11.2011, 00:59 #2
Проблема в том, что крайне левой индекс массива должен быть константным выражением.
То есть в С++ такое объявление

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

Такое объявление может компилироваться только для языка С, если компилятор поддерживает стандарт С99.
1
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++];
}
0
Сыроежка
Заблокирован
23.11.2011, 01:09 #4
al-tracer-93,

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

Вы лучше расскажите, что вам надо сделать в этой функции?
0
al-tracer-93
0 / 0 / 0
Регистрация: 23.11.2011
Сообщений: 20
23.11.2011, 01:30  [ТС] #7
Я пытаюсь реализовать функцию сортировки слиянием. Собственно эта функция и есть сортировка+слияние.
0
Сыроежка
Заблокирован
23.11.2011, 01:56 #8
Цитата Сообщение от al-tracer-93 Посмотреть сообщение
Я пытаюсь реализовать функцию сортировки слиянием. Собственно эта функция и есть сортировка+слияние.
То есть вам надо отсортировать исходный массив. Правтильно? Причем массив указателей (так у вас задано в объявлении функции). Для этого вам нужен временный массив, равный по размерности исходному массиву. Так?
Ну тогда создавайте временный массив с помощью оператора new [], а при выходе из функции удалйте его с помощью оператора delete []
1
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++);
}
0
Сыроежка
Заблокирован
23.11.2011, 02:30 #10
al-tracer-93,

Вы только забыли в конце функции вызвать оператор delete[]. В противном случае без этого оператора у вас будет постоянно происходить утечка памяти при многократных вызовах функции.
0
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;
}
0
23.11.2011, 02:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2011, 02:42
Привет! Вот еще темы с ответами:

Массив указателей не могу понять ошибку - C++
Массив указателей не могу понять ошибку почему нельзя так присвоить значение:c-&gt;data=d;?Объясните пожалуйста! Вот сам код программы: ...

Объявить массив? Запросто! Объявить массив массивов? А как это? - C++
Доброго времени суток! Конечно, все знают, как объявить массив! int main () { int array; }

как сделать чтобы объект производного класса сам себя добавлял в список или массив указателей базового класса? - C++
я хотел так, но программа просто падает void Student::add(Base** head) { cout &lt;&lt; &quot;I here&quot; &lt;&lt; endl; this-&gt;setName(); //все...

Массив указателей на массив строк и сортировка массива указателей - C++
Добрый день. Поступил вопрос. Есть задача. У нас встроенный массив char mass;.Мы вводим строки до тех пор, пока не будет заполнен массив...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.