Проблема с передачей матрицы в функцию

101
24 октября 2019, 06:30

В интернет искал ответ на свой вопрос, но не один из способов не работал.

Можете исправить и объяснить почему у меня так не работает?

Ошибка:

main.cpp:3:58: ошибка: use of parameter outside function body before «]» token void print_array(int wight, int height, int vmatrix[wight][height]) ^ main.cpp:3:66: ошибка: use of parameter outside function body before «]» token void print_array(int wight, int height, int vmatrix[wight][height])

Код:

#include <iostream>
void print_array(int wight, int height, int matrix[wight][height])
{
    std::cout << "";
}
int main()
{
    setlocale(LC_ALL, "Russian");
    int wight, height;
    std::cout << "Введите размер матрицы: ";
    std::cin >> wight >> height;
    /* Проверка */
    if (wight < 1 || height < 1)
    {
        std::cout << "Ошибка. Матрица такой не может быть" << '\n';
        return 1;
    }
    int matrix[wight][height];
    std::cout << "Введите данные для этой матрицы" << std::endl;
    for (int index_1 = 0; index_1 < wight; index_1++)
    {
        for (int index_2 = 0; index_2 < height; index_2++)
        {
            std::cin >> matrix[index_1][index_2];
        }
    }
    std::cout << "Матрица получилась: " << '\n';
    print_array(wight, height, matrix);
    return 0;
}

Версия компилятора: g++ (GCC) 8.2.1 20181127

Answer 1

Если не хотите vector<vector<int>>, можно выделять матрицу динамически. Только вот обычно матрицы записываются построчно, а не постолбцово, как у вас. Матрица 5x6 - это пять строк по 6 элементов.

Вот решение с динамическим выделением матрицы:

void print_array(int width, int height, int ** matrix)
{
    for (int index_1 = 0; index_1 < height; index_1++)
    {
        for (int index_2 = 0; index_2 < width; index_2++)
        {
            std::cout << matrix[index_1][index_2] << "  ";
        }
        std::cout << "\n";
    }
}
int main()
{
    int width, height;
    std::cout << "Введите размер матрицы: ";
    std::cin >> height >> width;
    /* Проверка */
    if (width < 1 || height < 1)
    {
        std::cout << "Ошибка. Матрица такой не может быть" << '\n';
        return 1;
    }
    int ** matrix = new int*[height];
    for(int i = 0; i < height; ++ i)
        matrix[i] = new int[width];
    std::cout << "Введите данные для этой матрицы" << std::endl;
    for (int index_1 = 0; index_1 < height; index_1++)
    {
        for (int index_2 = 0; index_2 < width; index_2++)
        {
            std::cin >> matrix[index_1][index_2];
        }
    }
    std::cout << "Матрица получилась: " << '\n';
    print_array(width, height, matrix);
    for(int i = 0; i < height; ++ i)
        delete[] matrix[i];
    delete[] matrix;
}
READ ALSO
Как создать дочерний процесс который не зависит от родителя, то есть не умирает при родителе с++

Как создать дочерний процесс который не зависит от родителя, то есть не умирает при родителе с++

У меня есть одна консоль и надо сделать так чтоб мой код создал отдельные процессы и когда его родителя закроют, то дети продолжали работать

111
Доступ к элементу вектора ссылок

Доступ к элементу вектора ссылок

Предположим есть класс A:

119
Получить ссылку на родительский класс

Получить ссылку на родительский класс

Как воспользоваться конструктором копирования родительского класса в конструкторе копирования дочернего?

113
Нужно перевернуть строку c++

Нужно перевернуть строку c++

С клавиатуры вводится строка символов, представляющая собой предложение со знаками препинания (точка, запятая, восклицательный знак)Вывести...

109