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

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

Восстановить пароль Регистрация
 
Aleksandr644
2 / 2 / 0
Регистрация: 11.08.2014
Сообщений: 11
14.08.2014, 09:48     При заполнении двумерного массива выдает ошибку #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
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)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gru74ik
Модератор
 Аватар для gru74ik
3068 / 1313 / 164
Регистрация: 20.02.2013
Сообщений: 3,742
Записей в блоге: 15
14.08.2014, 10:04     При заполнении двумерного массива выдает ошибку #2
Включи в своей среде разработки в настройках компилятора поддержку С++11.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2133 / 966 / 222
Регистрация: 30.11.2013
Сообщений: 3,223
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
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 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
 Аватар для 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++
Ошибка при заполнении динамического массива C++
Вылетает программа при заполнении массива C++

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

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

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