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

[Error] variable-sized object 'stepsInMaze' may not be initialized - C++

Восстановить пароль Регистрация
 
anubis1768
4 / 4 / 0
Регистрация: 23.02.2013
Сообщений: 151
25.03.2013, 16:17     [Error] variable-sized object 'stepsInMaze' may not be initialized #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
#include <iostream>
#include <windows.h>
#include <cstdlib>
 
struct point
{
    int x;
    int y;
};
 
int mazeTraverse( const int, const char[][12], point& );
 
int main() {
    const int size = 12;
    
    const char maze[size][size] = 
    { '#','#','#','#','#','#','#','#','#','#','#','#',
      '#','.','.','.','#','.','.','.','.','.','.','#',
      '.','.','#','.','#','.','#','#','#','#','.','#',
      '#','#','#','.','#','.','.','.','.','#','.','#',
      '#','.','.','.','.','#','#','#','.','#','.','.',
      '#','#','#','#','.','#','.','#','.','#','.','#',
      '#','.','.','#','.','#','.','#','.','#','.','#',
      '#','#','.','#','.','#','.','#','.','#','.','#',
      '#','.','.','.','.','.','.','.','.','#','.','#',
      '#','#','#','#','#','#','.','#','#','#','.','#',
      '#','.','.','.','.','.','.','#','.','.','.','#',
      '#','#','#','#','#','#','#','#','#','#','#','#'
    };
    point pos;
    pos.x = 4;
    pos.y = 11;
    mazeTraverse( size, maze, pos );
    return 0;
}
 
int mazeTraverse( const int size, const char maze[][12], point &pos ) {
    
    static int stepsInMaze[size][size] = { 0 }; //вот  здесь ошибку видает
    stepsInMaze[pos.x][pos.y] = 1;
    
    for( int x = 0; x < size; x++, std::cout << std::endl ) {
        for( int y = 0; y < size; y++ ) {
            if( (x == pos.x) && (y == pos.y) ) {
                std::cout << "X";
            } else {
                std::cout << maze[x][y];
            }
        }
    }
    
    std::cout << "X: " << pos.x << " Y: " << pos.y;
    std::cout << " maze: " << pos.x - 1;
    std::system( "PAUSE > NULL" ); 
    
    if( (maze[pos.x - 1][pos.y] != '#') && (!stepsInMaze[pos.x - 1][pos.y]) )
        pos.x -= 1;
        
    if( (maze[pos.x][pos.y - 1] != '#') && (!stepsInMaze[pos.x][pos.y - 1]) )
        pos.y -= 1;
        
    if( (maze[pos.x][pos.y + 1] != '#') && (!stepsInMaze[pos.x][pos.y + 1]) )
        pos.y += 1;
    
    
    Sleep( 100 );
    std::system( "cls" );
    
    mazeTraverse( maze, pos, size );
}
Помогите пожалуйста... Первый раз с такой ошибкой встретился.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
25.03.2013, 16:20     [Error] variable-sized object 'stepsInMaze' may not be initialized #2
size должен быть известен в процессе компиляции, а не просто быть const.
Используйте динамическую память тогда
anubis1768
4 / 4 / 0
Регистрация: 23.02.2013
Сообщений: 151
25.03.2013, 16:34  [ТС]     [Error] variable-sized object 'stepsInMaze' may not be initialized #3
ну я сделаю статический указатель static int **stepsInMaze, а потом проинициализирую массив нулями. Проблема в том, что мне нужно только при первом запуске функции это сделать
Вот, что я написал
C++
1
2
3
4
5
6
7
8
static int **stepsInMaze = new int *[size];
    
    for( int i = 0; i < size; i++ )
        stepsInMaze[i] = new int[size];
    
    for( int i = 0; i < size; i++ )
        for( int j = 0; j < size; j++ )
            stepsInMaze[i][j] = 0;
Оно же будет при каждом запуске функции массив обнулять, верно? Или просто сделать все счетчики цикла тоже статик?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
25.03.2013, 16:37     [Error] variable-sized object 'stepsInMaze' may not be initialized #4
Не хорошо так делать, но:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int ** foo(int size){
    int **stepsInMaze = new int *[size];    
    for( int i = 0; i < size; i++ )
        stepsInMaze[i] = new int[size];    
    for( int i = 0; i < size; i++ )
        for( int j = 0; j < size; j++ )
            stepsInMaze[i][j] = 0;
     return stepsInMaze;
}
//...
int mazeTraverse( const int size, const char maze[][12], point &pos ) {    
    static int ** stepsInMaze = foo(size);
Yandex
Объявления
25.03.2013, 16:37     [Error] variable-sized object 'stepsInMaze' may not be initialized
Ответ Создать тему
Опции темы

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