Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

14.08.2014, 09:48. Просмотров 308. Ответов 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},
^
Сборка завершилась с ошибкой.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2014, 09:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос При заполнении двумерного массива выдает ошибку (C++):

Выдает ошибку при передаче массива в функцию - 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++
Объявляю и пытаюсь заполнить так: TArray__1&lt;System::Byte&gt; *buffer; buffer = new TArray__1 &lt;System::Byte&gt; (6); buffer='r'; ...

Глюк при заполнении массива - 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++
Помогите пожалуйста решить проблему: Это программа для игры в крестики нолики. В первой функции void instruction() необходимо вывести...

6
gru74ik
Эксперт CЭксперт С++
4207 / 1853 / 198
Регистрация: 20.02.2013
Сообщений: 4,992
Записей в блоге: 22
14.08.2014, 10:04 #2
Включи в своей среде разработки в настройках компилятора поддержку С++11.
0
rikimaru2013
C++ Game Dev
2440 / 1133 / 240
Регистрация: 30.11.2013
Сообщений: 3,690
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 и тебе советую.
2
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 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]= {{...}, ...}
2
Aleksandr644
2 / 2 / 0
Регистрация: 11.08.2014
Сообщений: 11
14.08.2014, 10:27  [ТС] #5
Начал обучаться в Линуксе. Работаю в geany... компилятор G++ версии 4.8.2 ... вродь по умолчанию должно быть включено...

А разве кроме как в main нельзя инициализировать массив?
0
RussBear
1 / 1 / 1
Регистрация: 06.08.2014
Сообщений: 68
14.08.2014, 10:28 #6
Aleksandr644, а не проще заполнять массив не вручную, а проработать алгоритм заполнения, тогда все проще будет.
0
Aleksandr644
2 / 2 / 0
Регистрация: 11.08.2014
Сообщений: 11
14.08.2014, 10:36  [ТС] #7
rikimaru2013 спасибо учту ошибки.
Ilot спасибо, все сразу заработало. Видимо плохо прочитал про инициализацию массива и тем более запутался в ответе компилятора.
0
14.08.2014, 10:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2014, 10:36
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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