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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
ra4ok
0 / 0 / 0
Регистрация: 12.10.2011
Сообщений: 37
#1

Expected constant expression; cannot allocate an array of constant size 0 - C++

11.10.2012, 04:57. Просмотров 1914. Ответов 3
Метки нет (Все метки)

Доброго утра. Народ помогите, вот программа оформлена в виде функции
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <iomanip>
#include <cstdlib>
using namespace std;
void dno(int **Matrix,int n,int m)
{int Check = 0;int collNumber = 0;
    cout << "First coll's number with zero element: ";
    for(int j = 0; j < n; j++)
            for(int i = 0; i < m; i++)
            {
                    if(!Check)
                              if(!Matrix[i][j])
                              {
                                               Check = 1;
                                               collNumber = j;
                              }
            }
    cout << collNumber + 1 << endl;
}
void sort(int **Matrix, int n,int m,int *A)
{int i;
    for(i=0; i<n-1; i++)
    {int A[n]={0}, i_min;
        i_min=i;
        for(int j=i+1; j<m; j++)
            if(A[i_min]<A[j])
                i_min=j;
        swap(A[i_min], A[i]);
        for(j=0; j<n; j++)
            swap(Matrix[i_min][j], Matrix[i][j]);
    }
   cout << "New matrix: " << std::endl;
    for(i = 0; i < n; i++)
    {
            for(int j = 0; j < n; j++)
            {
                    cout << setw(4) << Matrix[i][j]<< " ";
            }
            cout << endl;
    }   
}
int main ()
{
    const int n = 5;
    int Matrix[n][n],  A[n]={0}, i_min;
    
    cout << "Matrix: " << endl;
    for(int i = 0; i < n; i++)
    {
            for(int j = 0; j < n; j++)
            {
                    cout << setw(4) << (Matrix[i][j] = rand() % 4-3);
                    if(Matrix[i][j]<0 && Matrix[i][j]%2==0)
                        A[i]+=Matrix[i][j];
            }
            cout <<endl;
    }
    dno(Matrix,n,m);
    sort(Matrix,n,m);
    return 0;
}
Программа ругается на A[n]={0}, пишет :expected constant expression;cannot allocate an array of constant size 0. я подумал сначала, что надо этот массив впихнуть в функцию, но это дало еще больше ошибок. И еще dno(Matrix,n,m); пишет, что не известна "m".
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2012, 04:57     Expected constant expression; cannot allocate an array of constant size 0
Посмотрите здесь:

E2313 Constant expression required - C++
при компиляции возникает ошибка в последней строке test.v1.cpp(38): E2313 Constant expression required main (){ int count; int j...

Expected unqualified-id before numeric constant - C++
какое уменя ошибка ? #include &lt;iostream&gt; using namespace std; float lbstokg(float); int main() { float lbs, kgs; cout &lt;&lt;...

Как исправить ошибку expression must have a constant value? - C++
void main() { int a; int n; cin &gt;&gt; n; const int dim = n; int mass; //IntelliSense: expression must have a constant value ...

Error: expected unqualified-id before numeric constant - C++
Ну значит так.Простенькая программа просто что бы научиться. Имеется форма созданная с помощью конструктора ResEd. Компилятор CodeBlock.Я...

Не могу понять в чем ошыбка [C++ Error] SKLAD.cpp(32): E2313 Constant expression required - C++
Не могу найти ошибку SKLAD.cpp(32): E2313 Constant expression required точнее понять из-а чего она и как ее исправить #include...

Ошибка "Constant expression is required" - const в сlass - C++
Создал класс: class TVseGrup { public: TVseGrup(const short KolTo4=0) : FKolTo4(KolTo4) {FKolTo4=0;} const short FKolTo4; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
11.10.2012, 05:32     Expected constant expression; cannot allocate an array of constant size 0 #2
int A[n]={0} - размер массива можно задавать только константным выражением, значение которого известно во время компиляции. т.е.
C++
1
2
3
4
5
6
7
8
9
int A[5] = {0};
 
//или
const int n = 5;
int A[n] = {0};
 
//если размер известен только во время выполнения программы, то используйте вектор вместо массива:
std::vector<int> A(n, 0); // создание вектора размером n с нулевыми значениями элементов
// в вашем случае похоже только эта одна строка и поменяется.

ээээ чета я не понял. мутный код какой-то.
в функцию сортировки передается указатель на инт с именем A
внутри циклов создается массив с именем А и заполненный нулями. далее в массиве элементы не меняются. потом идет код, который сравнивает элементы этого массива, в котором заведомо одни нули.
WTF?
зачем вам в 23 строке int A[n]={0} вообще понадобилось?
ra4ok
0 / 0 / 0
Регистрация: 12.10.2011
Сообщений: 37
11.10.2012, 05:40  [ТС]     Expected constant expression; cannot allocate an array of constant size 0 #3
Цитата Сообщение от DU Посмотреть сообщение
int A[n]={0} - размер массива можно задавать только константным выражением, значение которого известно во время компиляции. т.е.
C++
1
2
3
4
5
6
7
8
9
int A[5] = {0};
 
//или
const int n = 5;
int A[n] = {0};
 
//если размер известен только во время выполнения программы, то используйте вектор вместо массива:
std::vector<int> A(n, 0); // создание вектора размером n с нулевыми значениями элементов
// в вашем случае похоже только эта одна строка и поменяется.

ээээ чета я не понял. мутный код какой-то.
в функцию сортировки передается указатель на инт с именем A
внутри циклов создается массив с именем А и заполненный нулями. далее в массиве элементы не меняются. потом идет код, который сравнивает элементы этого массива, в котором заведомо одни нули.
WTF?
зачем вам в 23 строке int A[n]={0} вообще понадобилось?
Вот собсна основной код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#include <algorithm> 
int main()
{
    srand(time(0));
    
    const int matrixSize = 5;
    int Matrix[matrixSize][matrixSize], collNumber = 0, Check = 0, A[matrixSize]={0}, i_min;
    
    std::cout << "Matrix: " << std::endl;
    for(int i = 0; i < matrixSize; i++)
    {
            for(int j = 0; j < matrixSize; j++)
            {
                    std::cout << std::setw(4) << (Matrix[i][j] = rand() % 20-10);
                    if(Matrix[i][j]<0 && Matrix[i][j]%2==0)
                        A[i]+=Matrix[i][j];
            }
            std::cout << std::endl;
    }
    
    std::cout << "First coll's number with zero element: ";
    for(int j = 0; j < matrixSize; j++)
            for(int i = 0; i < matrixSize; i++)
            {
                    if(!Check)
                              if(!Matrix[i][j])
                              {
                                               Check = 1;
                                               collNumber = j;
                              }
            }
    std::cout << collNumber + 1 << std::endl;
    for(int i=0; i<matrixSize-1; i++)
    {
        i_min=i;
        for(int j=i+1; j<matrixSize; j++)
            if(A[i_min]<A[j])
                i_min=j;
        std::swap(A[i_min], A[i]);
        for(int j=0; j<matrixSize; j++)
            std::swap(Matrix[i_min][j], Matrix[i][j]);
    }
   std::cout << "New matrix: " << std::endl;
    for(int i = 0; i < matrixSize; i++)
    {
            for(int j = 0; j < matrixSize; j++)
            {
                    std::cout << std::setw(4) << Matrix[i][j]<< " ";
            }
            std::cout << std::endl;
    }   
    
    system("pause");
    return 0;
}
А этот что я написал, то как нас "учили" писать в универе...
Так что мне с A[n] делать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2012, 05:50     Expected constant expression; cannot allocate an array of constant size 0
Еще ссылки по теме:

Ошибка "Constant expression is required" - C++
Здравствуйте. Программа для формирования одномерного массива из матрицы размером N*N, компилятор turbo c++, выдает такую ошибку: Constant...

Ошибка: "case expression not constant" - C++
int draw(char form, int razmer){ switch(form){ case&quot;t&quot;:{ int i=0; while(i&lt;=10) { int s=10;

Двумерный массив <array>. const int value = array.size(); value не константа? - C++
#include &lt;array&gt; #include &lt;iostream&gt; using std::array; using std::cout; /*ФУНКЦИЯ ЗАПОЛНЕНИЯ МАССИВА ЗНАЧЕНИЯМИ*/ template...

[Warning] character constant too long for its type - C++
Подскажите, пожалуйста, что я не так сделал? Выдает ошибки, что &quot; character constant too long for its type &quot; #include &lt;iostream&gt; ...

Deprecated conversion from string constant to 'char*' - C++
Подскажите,как записать чаровский массив и можно ли его вообще записать вроде: char *one = {&quot;&quot;,&quot;один &quot;,&quot; два &quot;,&quot;три &quot;,&quot;четыре &quot;,&quot;пять...

[Warning] deprecated conversion from string constant to 'char*' - C++
В общем делаю классы, но не получается выводит ошибку. файл Selhoz.h #ifndef _SELHOZ_H_ #define _SELHOZ_H_ #include...


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

Или воспользуйтесь поиском по форуму:
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
11.10.2012, 05:50     Expected constant expression; cannot allocate an array of constant size 0 #4
C++
1
2
3
4
5
6
// написал же заменить
int A[n] = {0}, i_min;
i_min = i;
// на
std::vector<int> A(n, 0);
int i_min = i;
не забыть добавить #include <vector>
Yandex
Объявления
11.10.2012, 05:50     Expected constant expression; cannot allocate an array of constant size 0
Ответ Создать тему
Опции темы

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