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

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

Войти
Регистрация
Восстановить пароль
 
Aleksandr644
2 / 2 / 0
Регистрация: 11.08.2014
Сообщений: 11
#1

При заполнении двумерного массива выдает ошибку - C++

14.08.2014, 09:48. Просмотров 287. Ответов 6
Метки нет (Все метки)

Недавно начал изучать С++ и застрял на двумерном массиве.
решил сделать двумерный массив в виде лабиринта, но компилятор выдает ошибку на заполнении массива.
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include <ctime>
#include <cstdlib>
 
using namespace std;
 
bool labyrinthPic(short*);
 
int main()
{
    const unsigned short size =28;
    short labyrinth[size][size]; 
    srand(time(0));
    labyrinthPic(labyrinth[28]);
}
 
bool labyrinthPic(short (*labyr)[28])
{
    const unsigned short sz=28;
    labyr[sz][sz]=                {{1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
                                   {1,1,1,1,2,1,1,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,2,2,2,1},
                                   {1,1,2,2,2,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,2,1,2,1},
                                   {1,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,1},
                                   {1,2,1,1,0,1,1,2,2,2,2,2,2,2,2,1,0,1,1,1,1,1,1,1,1,1,2,1},
                                   {1,2,1,0,0,1,0,2,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,2,1},
                                   {1,2,1,0,1,1,1,2,1,0,1,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,2,1},
                                   {1,2,1,0,1,0,1,2,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,1,2,1},
                                   {1,2,1,0,1,0,1,2,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,2,1},
                                   {1,2,1,0,1,0,1,2,2,2,2,0,0,0,1,0,1,0,1,0,0,0,1,0,1,1,2,1},
                                   {1,2,1,0,1,0,1,1,1,1,2,1,1,1,1,0,1,0,1,1,1,1,1,0,1,1,2,1},
                                   {1,2,2,2,1,0,0,0,1,0,2,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,2,1},
                                   {1,0,1,2,1,1,1,0,1,1,2,1,1,0,1,1,1,0,0,1,1,0,1,1,1,1,2,1},
                                   {1,1,0,2,2,2,1,0,1,1,2,1,1,0,1,1,0,1,0,1,1,0,1,0,0,1,2,1},
                                   {1,0,1,1,1,2,1,2,2,2,2,1,0,0,1,0,0,0,0,0,1,0,1,0,1,1,2,1},
                                   {1,0,1,0,0,2,1,2,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,1,2,1},
                                   {1,0,1,1,1,2,1,2,1,0,1,0,0,0,1,0,0,0,1,0,1,0,1,1,0,1,2,1},
                                   {1,0,1,0,0,2,1,2,1,0,0,0,1,0,0,0,1,0,1,2,2,2,2,1,0,1,2,1},
                                   {1,0,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,0,1,2,1,1,2,1,0,1,2,1},
                                   {1,0,1,3,3,3,1,1,0,0,0,0,0,0,0,0,0,0,0,2,1,1,2,2,2,2,2,1},
                                   {1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1},
                                   {1,3,1,1,1,0,1,3,3,3,1,0,1,0,0,0,0,0,0,2,1,2,2,2,1,0,1,1},
                                   {1,3,0,0,0,0,1,3,1,3,1,0,1,1,1,1,1,1,1,2,1,2,1,2,1,0,1,1},
                                   {1,3,1,1,1,1,1,3,1,3,1,0,0,0,0,0,0,0,0,2,2,2,1,2,1,0,1,1},
                                   {1,3,3,3,3,3,3,3,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1},
                                   {1,1,1,1,1,1,1,1,1,3,3,3,3,1,3,3,3,1,3,3,3,1,1,2,2,2,1,1},
                                   {1,0,0,0,0,0,0,0,0,0,1,1,3,3,3,1,3,3,3,1,3,3,3,3,1,2,1,1},
                                   {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1}};
/* 0 - ложный путь , 1 - стенка , 2 - верный путь, 3 - секретный путь , 4 - начало, 5 - конец
 * 6 - это персонаж*/
    for(short x=0;x<28;x++)
    {
        for(short y=0;y<28;y++)
        {
            if( labyr[x][y] == 1)
            {
                cout<< static_cast<char>(124);
                cout<< static_cast<char>(124);
            }
            /*else if (labyr[x][y]==2)
            {
                cout<< static_cast<char>(58);
                cout<< static_cast<char>(58);
            }*/
            else if (labyr[x][y]==4)
            {
                cout<< static_cast<char>(94);
                cout<< static_cast<char>(94);
            }
            else if (labyr[x][y]==5)
            {
                cout<< static_cast<char>(42);
                cout<< static_cast<char>(42);
            }
            else if (labyr[x][y]==6)
            {
                short varrand; 
                varrand = rand()%50-rand()%50;
                if(varrand>=0)
                    cout<< static_cast<char>(81)<<" ";
                else
                    cout<< " "<<static_cast<char>(81);
            }
            else 
            {
                cout<< "  ";
            }
        }
        cout << endl;
    }
    cout<<"\t\t\t"<< static_cast<char>(81) << " - это вы.";
    cin.get();
    return 0;
}
в ответ на это выделет заполнение массива(строки 20 и 47) и пишет:
Кликните здесь для просмотра всего текста
g++ -Wall -o "Лабиринт" "Лабиринт.cpp" (в каталоге: /home/aleksandr/Рабочий стол)
Лабиринт.cpp: In function ‘bool labyrinthPic(short int (*)[28])’:
Лабиринт.cpp:47:69: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1}};
^
Лабиринт.cpp:20:15: error: cannot convert ‘<brace-enclosed initializer list>’ to ‘short int’ in assignment
labyr[sz][sz]= {{1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
^
Сборка завершилась с ошибкой.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2014, 09:48     При заполнении двумерного массива выдает ошибку
Посмотрите здесь:

Выдает ошибку при передаче массива в функцию - C++
Ругается на 59 строку: 2.cpp(59): error C2664: otn: невозможно преобразовать параметр 4 из &quot;double **&quot; в &quot;double&quot; Не существует...

Компилятор выдает ошибку при объявлении массива. Не могу понять где соль - C++
Объясните пожалуйста в чем моя ошибка. Вот исходник #include &lt;iostream&gt; // cin, cout,endl #include &lt;math.h&gt; // Мат функции ...

Помогите найти ошибку при заполнении вектора - C++
Допустил ошибку при заполнении вектора. #include&lt;iostream&gt; #include&lt;cstring&gt; #include&lt;vector&gt; #include&lt;iterator&gt; using namespace...

Ошибка при заполнении массива - C++
Помогите пожалуйста решить проблему: Это программа для игры в крестики нолики. В первой функции void instruction() необходимо вывести...

ошибка при заполнении массива - C++
хочу заполнить массивы класса (и сразу же записать в файл), если выбрать количество записей - 1, то все работает нормально, но больше...

Глюк при заполнении массива - C++
Заполняю массив float row float j=0; for (int i=0;i&lt;501;i++) { row=j; cout&lt;&lt;j&lt;&lt;endl; j += 0.02; ...

Выдает ошибку ! Даны два массива. Найти отклонение медианы от среднего арифметического для третьего массива - C++
3. Даны два массива. Найти отклонение медианы от среднего арифметического для третьего массива, элементы которого - частное от деления...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gru74ik
Модератор
Эксперт CЭксперт С++
3977 / 1724 / 193
Регистрация: 20.02.2013
Сообщений: 4,823
Записей в блоге: 21
14.08.2014, 10:04     При заполнении двумерного массива выдает ошибку #2
Включи в своей среде разработки в настройках компилятора поддержку С++11.
rikimaru2013
C++ Game Dev
2399 / 1093 / 237
Регистрация: 30.11.2013
Сообщений: 3,620
14.08.2014, 10:05     При заполнении двумерного массива выдает ошибку #3
1) main должен возращать знач
C++
1
return 0;
2) Инициализация двухмерного массива с данными надо делать тут
C++
1
short labyrinth[size][size] = { {...}. {...}, .......}
3) В функцию передавайте
C++
1
2
3
4
5
6
7
8
bool labyrinthPic(short Arr[][SIZE], int size)
{
... // код
}
 
где SIZE перед using namespace напишите
 
#define SIZE 28
4) Отсюда новый main()
C++
1
2
3
4
5
6
7
int main()
{    
    srand(time(0));
    short labyrinth[SIZE][SIZE] = { {...}. {...}, .......};     
    labyrinthPic(labyrinth[][SIZE], SIZE);
return 0;
}
5) cout<< static_cast<char>(124) на
C++
1
cout << (char)124;
6) Кучу if'ов на switch
C++
1
2
3
4
5
6
7
8
9
10
11
switch(labyr[x][y])
{
     case 1:
          cout << ...;
          break;
     case 2:
          cout << ...;
          break;
     default:
          break;
}
7) Я люблю Visual Studio 2012 и тебе советую.
Ilot
Модератор
Эксперт С++
1788 / 1163 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
14.08.2014, 10:24     При заполнении двумерного массива выдает ошибку #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от gru74ik Посмотреть сообщение
Включи в своей среде разработки в настройках компилятора поддержку С++11.
Проблема не в поддержке стандарта, а в том, что ТС пытается присвоить одному элементу список инициализации. Bспользовать список инициализации можно только при инициализации массива. Т.е. вот так можно:
C++
1
 short Qlabyr[sz][sz]= {{...}, ...}
А вот так нет:
C++
1
2
short Qlabyr[sz][sz];
Qlabyr[sz][sz]= {{...}, ...}
Aleksandr644
2 / 2 / 0
Регистрация: 11.08.2014
Сообщений: 11
14.08.2014, 10:27  [ТС]     При заполнении двумерного массива выдает ошибку #5
Начал обучаться в Линуксе. Работаю в geany... компилятор G++ версии 4.8.2 ... вродь по умолчанию должно быть включено...

А разве кроме как в main нельзя инициализировать массив?
RussBear
1 / 1 / 1
Регистрация: 06.08.2014
Сообщений: 77
14.08.2014, 10:28     При заполнении двумерного массива выдает ошибку #6
Aleksandr644, а не проще заполнять массив не вручную, а проработать алгоритм заполнения, тогда все проще будет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2014, 10:36     При заполнении двумерного массива выдает ошибку
Еще ссылки по теме:

Сообщение о ошибке при заполнении массива - C++
Привет всем! Возникла проблемма при заполнении массива малыми числами. При компиляции выводится сообщение &quot;floating constant truncated...

Вылетает программа при заполнении массива - C++
Добрый день. Решил написать простой код отрисовки карты в консоли. Идея: 1.Создаю объект структуры, содержащий перечень координат в...

Ошибка при заполнении динамического массива - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int N, i, a, l; int head = -1; char ch; int *s = new int ; ...

Ошибка исполнения при заполнении массива - C++
Программа работы с квадратными матрицами. Используются динамические массивы. Задание из вуза. Использование функций запрещено по...

Ошибка при заполнении массива малыми числами - C++
Привет всем! В программе необходимо использовать массив с малыми числами, порядка 1.47243e-331. Элементы массива описаны как &quot;long...


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

Или воспользуйтесь поиском по форуму:
Aleksandr644
2 / 2 / 0
Регистрация: 11.08.2014
Сообщений: 11
14.08.2014, 10:36  [ТС]     При заполнении двумерного массива выдает ошибку #7
rikimaru2013 спасибо учту ошибки.
Ilot спасибо, все сразу заработало. Видимо плохо прочитал про инициализацию массива и тем более запутался в ответе компилятора.
Yandex
Объявления
14.08.2014, 10:36     При заполнении двумерного массива выдает ошибку
Ответ Создать тему
Опции темы

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