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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.68
ms.natali
 Аватар для ms.natali
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14
16.03.2012, 19:47     Компилятор выдает ошибку при объявлении массива. Не могу понять где соль #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
62
63
64
65
66
67
#include <iostream> // cin, cout,endl
#include <math.h>   // Мат функции
#include <iomanip>  // формат вывода
 
using namespace std;
const int n=2; //Кол-во строк
const int m=7; //Кол-во столбцов
 
void vvod(int a[n][m])
{
for(int i=0;i<n;i++)
    for(int j=0;j<m;j++) a[i][j]=rand()/1000;
}
 
void vyvod(int a[n][m])
 
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++) cout<<a[i][j]<<"      ";cout<<endl;
    }
}
int nom(int a[n][m],int p)
{
    int nom=0;
    for(int i=0;i<n;i++)
    {   
        for(int j=0;j<m;j++) if(a[i][j]>p) nom+=1;
    }
    return nom;
}
int form(int a[n][m], int p, const int q)
{
    int b[q];
    for(int i=0;i<n;i++)
    {   
        for(int j=0;j<m;j++)
            if(a[i][j]>p) {for (int k=0;k<q;k++) b[k]=a[i][j];}
    }
    return b[q];
}
 
void output_mas(int a[], int m)
{
    cout<<"massiv"<<endl;
    for(int i=0;i<m;i++)
        cout<<" "<<a[i];
    cout<<endl;
}
int main()
{
int w[n][m],z[n][m];
setlocale (LC_CTYPE, "Russian");
vvod(w);vvod(z);
cout<<"Изначальная матрица W"<<endl; vyvod(w);
cout<<"Изначальная матрица Z"<<endl; vyvod(z);
int p;
cout<<"Введите число, больше которого должны быть элементы"<<endl; cin>>p;
const int kw=nom(w,p);
const int kz=nom(z,p);
int t[kw],s[kz];
t[kw]=form(w,p,kw);
s[kz]=form(z,p,kz);
output_mas(t,kw);
output_mas(s,kz);
system ("pause");
}
Visual studio выдает вот такие ошибки.
C++
1
2
3
4
5
6
7
8
9
10
1>1.cpp
1>c:1.cpp(34) : error C2057: expected constant expression
1>c:1.cpp(34) : error C2466: cannot allocate an array of constant size 0
1>c:1.cpp(34) : error C2133: 'b' : unknown size
1>c:1.cpp(61) : error C2057: expected constant expression
1>c:1.cpp(61) : error C2466: cannot allocate an array of constant size 0
1>c:1.cpp(61) : error C2133: 't' : unknown size
1>c:1.cpp(61) : error C2057: expected constant expression
1>c:1.cpp(61) : error C2466: cannot allocate an array of constant size 0
1>c:1.cpp(61) : error C2133: 's' : unknown size
Dev-C++ Ошибок не находит но при запуске выдает огромные неясно от куда цифры. в чем ошибка не понимаю. подскажите.
Вообще задача стоит такая:
Задать значения целочисленным элементам матриц W = {wij} и Z = {zij}, где i = 0, 1, 2; j = 0, 1, 2,..., 7 и сформировать массивы T и S соответственно из элементов матриц W и Z, больших заданного числа Р.

заранее спасибо =)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2012, 19:47     Компилятор выдает ошибку при объявлении массива. Не могу понять где соль
Посмотрите здесь:

Компилятор выдает ошибку при создании списка C++
C++ Почему при объявлении переменных тип float выдает ошибку
почему где подчеркнуто выдает ошибку,понять не могу(программа не дописана) C++
Выдает ошибку но я не могу понять почему C++
Массив: при компилировании исходника компилятор выдает ошибку C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
16.03.2012, 20:27     Компилятор выдает ошибку при объявлении массива. Не могу понять где соль #2
Цитата Сообщение от ms.natali Посмотреть сообщение
C++
1
int b[q];
Так в плюсах можно делать, только если q константа. Используйте динамическое выделение памяти через new
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
16.03.2012, 20:29     Компилятор выдает ошибку при объявлении массива. Не могу понять где соль #3
Так там q и есть константа Думаю что значение данной константы должно быть известно на этапе компиляции.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
16.03.2012, 20:31     Компилятор выдает ошибку при объявлении массива. Не могу понять где соль #4
Спецификатор const ещё не делает значение одинаковым при каждом вызове.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
16.03.2012, 20:39     Компилятор выдает ошибку при объявлении массива. Не могу понять где соль #5
Хотя странно, сейчас вбил такой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
void outArray( const int a ) {
    int b[ a ];
 
    for ( int i = 0; i < a; i++ )
    b[ i ] = i;
 
    for ( int i = 0; i < a; i++ )
    std::cout << b[ i ];
}
int main( int argc, char** argv ) {
    int b;
    std::cin >> b;
 
    return 0;
}
и он нормально отработал на компиляторе MinGW 4.6.2
И вообще у вас странная функция form. Создает массив b, не инициализирует его, и возвращает не существующий элемент.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.03.2012, 15:47     Компилятор выдает ошибку при объявлении массива. Не могу понять где соль #6
Toshkarik, mingw - порт gcc под Windows. gcc используется нестандартное расширение c++ - variable length arrays. Отсюда эффект. По стандарту так делать нельзя.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
18.03.2012, 01:30     Компилятор выдает ошибку при объявлении массива. Не могу понять где соль #7
silent_1991, понятно, а можно как то отключить эти нестандартные "фишки"?
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
18.03.2012, 04:10     Компилятор выдает ошибку при объявлении массива. Не могу понять где соль #8
Toshkarik, компилируй с «-ansi -pedantic-errors» (+ хорошо бы еще и с «-Wall -Werror -Wextra»)
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
18.03.2012, 13:18     Компилятор выдает ошибку при объявлении массива. Не могу понять где соль #9
Nameless One, спасибо, я компилирую с -Wall и с -Werror. Теперь буду со всем остальным тоже.
ms.natali
 Аватар для ms.natali
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14
18.03.2012, 16:26  [ТС]     Компилятор выдает ошибку при объявлении массива. Не могу понять где соль #10
Я в итоге не поняла как надо объявить массив b и кол-во ячеек чтобы фунция знала что там всё ок и это константа?
Кстати вот переделанный код. теперь выдает только ошибку связанную с массивом.
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
#include <iostream>
#include <iomanip>
using namespace std;
const int n=2;
const int m=7;
void input(int a[n][m])
{
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            a[i][j]=rand()/100-100;
}
void output ( int a[n][m])
    {
        cout<<"Output matr>"<<endl;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
                cout<<setw(6)<<a[i][j];
            cout<<endl;
        }
    }
int nom (int a[n][m],int p)
{
    int q=0;
    for(int i=0;i<n;i++)
    {
            for(int j=0;j<m;j++)
                if(a[i][j]>p) q++;
    }
    return q;
}
void form(int a[n][m],int p,int e)
{
    int b[e];
    for(int i=0;i<n;i++)
    {
            for(int j=0;j<m;j++)
                if(a[i][j]>p) {for (int k=0;k<e;k++) b[k]=a[i][j];}
    }
    for(int k=0;k<e;k++) cout<<b[k]<<" ";
    cout<<endl;
}
int main()
{
int w[2][7],z[2][7];
cout<<"W"<<endl;
input(w);output(w);
cout<<"Z"<<endl;
input(z);output(z);
int p; cout<<"p= "; cin>>p; cout<<endl;
const int t=nom (w,p);
const int s=nom (z,p);
form(w,p,t);
form(z,p,s);
system("pause");
}
C++
1
2
3
1>c:\documents and settings\admin\мои документы\visual studio 2008\projects\111\111\111.cpp(34) : error C2057: expected constant expression
1>c:\documents and settings\admin\мои документы\visual studio 2008\projects\111\111\111.cpp(34) : error C2466: cannot allocate an array of constant size 0
1>c:\documents and settings\admin\мои документы\visual studio 2008\projects\111\111\111.cpp(34) : error C2133: 'b' : unknown size
Hemull
47 / 47 / 1
Регистрация: 12.03.2012
Сообщений: 108
18.03.2012, 18:39     Компилятор выдает ошибку при объявлении массива. Не могу понять где соль #11
ms.natali,
C++
1
int *b = new int[e];
в 34 строке
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2012, 19:05     Компилятор выдает ошибку при объявлении массива. Не могу понять где соль
Еще ссылки по теме:

Выдает ошибку при компиляции. Не могу понять почему C++
Ткните, пожалуйста, носом в ошибку. я не могу понять где, что не так C++
Компилятор выдает ошибку при использовании фабричного метода C++

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

Или воспользуйтесь поиском по форуму:
ms.natali
 Аватар для ms.natali
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14
18.03.2012, 19:05  [ТС]     Компилятор выдает ошибку при объявлении массива. Не могу понять где соль #12
Теперь разобралась.Большое спасибо NoMasters И Hemull =)))
Yandex
Объявления
18.03.2012, 19:05     Компилятор выдает ошибку при объявлении массива. Не могу понять где соль
Ответ Создать тему
Опции темы

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