В чем заключается ошибка в функции?

378
03 ноября 2017, 11:10
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
using namespace std;
int **matrix_new(int m, int n)
{
    int **matrix = new int *[m];    
    for (int i = 0; i < m; i++)
    {
        matrix[i] = new int[n];
    }
    return matrix;
}
void  matrix_random(int **matrix, int m, int n)
{
    srand(time(0));
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            matrix[i][j]=rand()%10;
        }
    }
}
void matrix_print(int **matrix, int m, int n)
{
    for (int i = 0; i < m; i++)
    {
        cout << "| ";
        for (int j = 0; j < n; j++)
        {
            cout << matrix[i][j] << " ";
        }
        cout <<"|"<< endl;
    }
}
int **matrix_sum(int **matrix, int m, int n)
{
    int **sum = 0;
    for (int i = 0; i < m; i++)
    {
        sum = sum + matrix[m][n];
    }
    return sum;
}
int **matrix_sort(int **matrix, int m, int index1,int index2)
{
    int temp;
    for (int i = 0; i < m; i++)
    {
        temp = matrix[i][index2];
        matrix[i][index2] = matrix[i][index1];
        matrix[i][index1] = temp;
    }
    return matrix;
}
int matrix_form(int **matrix, int m, int n)
{
    for (int i = 0; i < n; i++)
    {
        int b = **matrix_sum(matrix, m, i);
        int index1 = i;
        for (int j = i; j < n; j++)
        {
            int c = **matrix_sum(matrix, m, j);
            int index2 = j;
            if(c<b)
            {
                b = c;
                matrix_sort(matrix, m, index1, index2 );
            }
        }
    }
    return **matrix ;
 }
int main()
{
    const int a = 4;
    const int b = 5;
    const int c = 8;
    int  **A = matrix_new (a, b);
    int  **B = matrix_new (b, c);
    matrix_random(A, a, b);
    matrix_random(B, b, c);
    cout << "Matrutsa A=" << endl;
    matrix_print(A, a, b);
    cout << "Matrutsa B=" << endl;
    matrix_print(B, b, c);
    matrix_form(A, a, b);
    matrix_form(B, b, c);
    cout << "Matrutsa A=" << endl;
    matrix_print(A, a, b);
    cout << "Matrutsa B=" << endl;
    matrix_print(B, b, c);
    system("pause");
    return(0);
}

В функции matrix_sum видает ошибку , подскажите что я не так написал?

Answer 1

matrix_sum идет в коде после matrix_sort и компилятор о нем на момент компиляции ничего не знает. Попробуйте вставить такое объявление после строки с using:

int **matrix_sum(int **matrix, int m);
Answer 2
  • В языке С++ требуется объявлять сущности (типы, переменные, функции и т.п.) перед их использованием. У вас в коде это правило нарушено: функция matrix_sum не объявляется перед попыткой ее использования. Именно об этом вам прямо сказал компилятор.

  • В коде присутствует классическая ошибка с множественным вызовом srand(time(0)). В результате обе ваши "случайные" матрицы окажутся заполненными одной и той же последовательностью значений.

  • Что за чушь у вас написана в matrix_sum - вообще не ясно. Вы пытаетесь применять адресную арифметику к нулевому указателю sum. В языке С++ не поддерживается адресная арифметика для нулевых указателей. Поведение не определено.

READ ALSO
Идеальное выравнивание (SSE SIMD)

Идеальное выравнивание (SSE SIMD)

Как можно сделать идеальное выравнивание ? К примеру

226
Смещение мировых координат в OpenGL

Смещение мировых координат в OpenGL

Всем доброго времени сутокОтлавливаю клики мыши, затем преобразую каждый клик, который является центром примитива, в некоторый набор точек

360
напишите мне пожалуйста програмку [требует правки]

напишите мне пожалуйста програмку [требует правки]

Описать структуру ABITURIENT со следующими полями:

279