Переменные в c++

Недавно столкнулся с проблемой по поводу использовании переменных в функции. В коде у меня есть массив was[n][m] который надо использовать в одной функции, но компилятор сообщает об ошибке. Пожалуйста подскажите как решить проблему. Вот код

#include <bits/stdc++.h>
using namespace std;

void search(int i, int j){
    if (was[i][j]) cout << 1;
}

int main(){
    int n, m;
    cin >> n >> m;
    int was[n][m];
    was[0][0] = 1;
    search(0, 0);
}

Требуется использовать массив в функции search()


Ответы (3 шт):

Автор решения: Harry

Ну вот, примерно так:

using namespace std;

void search(const vector<vector<int>& was, int i, int j)
{
    if (was[i][j]) cout << 1;
}

int main(){
    int n, m;
    cin >> n >> m;
    vector<vector<int> was(n, vector<int>(m));
    was[0][0] = 1;
    search(was, 0, 0);
}
→ Ссылка
Автор решения: llilrain

1)Здравствуйте, Ваша функция "не видит" массив, т.к. он находится в другой функции int main() .Объявите массив глобально, т.е. сразу после "using namespace std;". 2)Размер статического массива в c++ не может быть переменным значением, а только константным.

→ Ссылка
Автор решения: pagislav

1) У вас ошибка в объявлении массива. Например, это не будет работать на компиляторе MS Visual C++.

2) Массив was объявлен локально в функции int main, в функции search он будет недоступен

Мой вариант:

#include <iostream>

using namespace std;

int** was;

void search(int i, int j)
{
    if (was[i][j]) 
        cout << 1;
}

int main()
{
    int n, m;
    cin >> n >> m;

    was = (int**) calloc(n, sizeof(int*));
    for (int i = 0; i < n; ++i)
        was[i] = (int*)calloc(m, sizeof(int));

    was[0][0] = 1;
    search(0, 0);
}

Так же, вы можете передавать was в функцию, во избежание использования глобальных переменных

→ Ссылка