Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/32: Рейтинг темы: голосов - 32, средняя оценка - 4.81
 Аватар для ms.natali
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14

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

16.03.2012, 19:47. Показов 6270. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объясните пожалуйста в чем моя ошибка.
Вот исходник

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, больших заданного числа Р.

заранее спасибо =)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.03.2012, 19:47
Ответы с готовыми решениями:

Компилятор выдает ошибку при объявлении типа
Начал изучение Haskell совсем недавно, но уже столкнулся с проблемой. Ввожу: Func :: Int-&gt;Int-&gt;Int-&gt;Int Func a...

почему где подчеркнуто выдает ошибку,понять не могу(программа не дописана)
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { setlocale( LC_ALL,&quot;Russian&quot; ); int a,i,j; ...

Выдает ошибку при компиляции. Не могу понять почему
Помогите с кодом. Я вижу что ошибка уровня самых низов но не могу понять все равно что тут не так. Вот эта ошибка: // error...

11
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
16.03.2012, 20:27
Цитата Сообщение от ms.natali Посмотреть сообщение
C++
1
int b[q];
Так в плюсах можно делать, только если q константа. Используйте динамическое выделение памяти через new
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
16.03.2012, 20:29
Так там q и есть константа Думаю что значение данной константы должно быть известно на этапе компиляции.
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
16.03.2012, 20:31
Спецификатор const ещё не делает значение одинаковым при каждом вызове.
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
16.03.2012, 20:39
Хотя странно, сейчас вбил такой код
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, не инициализирует его, и возвращает не существующий элемент.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
17.03.2012, 15:47
Toshkarik, mingw - порт gcc под Windows. gcc используется нестандартное расширение c++ - variable length arrays. Отсюда эффект. По стандарту так делать нельзя.
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
18.03.2012, 01:30
silent_1991, понятно, а можно как то отключить эти нестандартные "фишки"?
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
18.03.2012, 04:10
Toshkarik, компилируй с «-ansi -pedantic-errors» (+ хорошо бы еще и с «-Wall -Werror -Wextra»)
1
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
18.03.2012, 13:18
Nameless One, спасибо, я компилирую с -Wall и с -Werror. Теперь буду со всем остальным тоже.
0
 Аватар для ms.natali
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14
18.03.2012, 16:26  [ТС]
Я в итоге не поняла как надо объявить массив 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
0
48 / 48 / 11
Регистрация: 12.03.2012
Сообщений: 108
18.03.2012, 18:39
ms.natali,
C++
1
int *b = new int[e];
в 34 строке
0
 Аватар для ms.natali
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14
18.03.2012, 19:05  [ТС]
Теперь разобралась.Большое спасибо NoMasters И Hemull =)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.03.2012, 19:05
Помогаю со студенческими работами здесь

Выдает ошибку понять не могу где исправить, запускаю первая кнопка работает, а вторая нет. скрин ниже
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids, ...

Выдает ошибку в при объявлении функции
вернее даже не ошибку но он просто не воспринимает видимо inc1 к слову это ValueListEditor function ValidateRearrangement:...

Не могу понять ошибку которую выдал компилятор
Доброго времени суток всем! Я тут написала программу, которая в параллельных потоках умножает матрицы. Но не могу понять почему компилятор...

Не могу понять ошибку которую выдал компилятор
Доброго времени суток всем! Я тут написала программу, которая в параллельных потоках умножает матрицы. Но не могу понять почему компилятор...

Структура: Не могу понять, почему выдает ошибку и как собственно эту ошибку можно исправить?
Привет,не могу понять почему ошибку выдает и как сбстно эту ошибку можно исправить? #include &lt;stdio.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru