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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
ra4ok
0 / 0 / 0
Регистрация: 12.10.2011
Сообщений: 37
11.10.2012, 04:57     Expected constant expression; cannot allocate an array of constant size 0 #1
Доброго утра. Народ помогите, вот программа оформлена в виде функции
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
Посмотрите здесь:

Не могу понять в чем ошыбка [C++ Error] SKLAD.cpp(32): E2313 Constant expression required C++
Ошибка "Constant expression is required" - const в сlass C++
Expected unqualified-id before numeric constant C++
"Constant expression required" C++ Builder
[Warning] character constant too long for its type C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 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] делать?
DU
1477 / 1053 / 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
Ответ Создать тему
Опции темы

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