создавать заголовочные файлы и запускать их - PullRequest
0 голосов
/ 29 марта 2020

/ Здесь я создал заголовочный файл для реализации представления матрицы. Но файл не компилируется и показывает сообщение «Проект еще не построен», как внести изменения в code? /

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

class Matrix
{
public:
  int n_rows, n_columns;
  int **arr;

  Matrix(int rows, int columns)
  {
    srand(time(0));
    n_rows = rows;
    n_columns = columns;

    arr = new int* [rows];

    for(int i = 0; i < rows; i++) {
      arr[i] = new int[columns];
    }

    for(int i = 0; i < rows; i++) {
      for(int j = 0; j < columns; j++){
        arr[i][j] = ((rand() % 100) - 50);
      }
    }
  }

  ~Matrix(){
    delete [] arr;
  }


  friend Matrix operator+(Matrix const &m1, Matrix const &m2){
    int x, y;
    Matrix newMat(m1.n_rows, m1.n_columns);
    for(int i = 0; i < m1.n_rows; i++) {
      for(int j = 0; j < m1.n_columns; j++) {
        newMat.arr[i][j] = m1.arr[i][j] + m2.arr[i][j];
      }
    }
    return newMat;
  }

  friend Matrix operator-(Matrix const &m1, Matrix const &m2){
    int x, y;
    Matrix newMat(m1.n_rows, m1.n_columns);
    for(int i = 0; i < m1.n_rows; i++) {
      for(int j = 0; j < m1.n_columns; j++) {
        newMat.arr[i][j] = m1.arr[i][j] - m2.arr[i][j];
      }
    }
    return newMat;
  }

  friend Matrix operator*(Matrix const &m1, Matrix const &m2) {
    Matrix newMat(m1.n_rows, m1.n_columns);
    for(int i = 0; i < m1.n_rows; i++) {
      for(int j = 0; j < m1.n_columns; j++) {
        newMat.arr[i][j] = m1.arr[i][j] * m2.arr[j][i];
      }
    }
    return newMat;
  }
};

/ Здесь я использовал файл c ++ для запуска файла заголовка, но сообщение «фатальная ошибка: Matrix.h: нет такого файл или каталог "был показан в сообщениях сборки. Как запустить файл заголовка с помощью этой программы? /

#include <iostream>
#include "Matrix.h"
using namespace std;


int columns, rows;

void printMatrix(Matrix mat){
  cout << "[ ";
  for(int i = 0; i < rows; i++) {
    cout << "[ ";
    for(int j = 0; j < columns; j++) {
      cout << mat.arr[i][j] << ", ";
    }
    cout << " ], ";
  }
  cout << " ]" << endl;
}

1 Ответ

2 голосов
/ 29 марта 2020

Здесь я создал файл заголовка для реализации представления матрицы. Но файл не компилируется

не компилирует файл заголовка (расширение h / hh), компилирует исходные файлы (расширение c / cc / cpp ...)

Matrix.h: нет такого файла или каталога

, что означает, что компилятор не найдите файл заголовка, если вы не поместите оба файла в один и тот же каталог, вам нужно указать, как найти файл заголовка. Способ выполнения зависит от используемого вами компилятора / IDE


Из этого можно сделать несколько замечаний:

printMatrix обычно является членом вашего класса , чтобы иметь ее как функцию, вам нужно получить доступ к внутренним членам вашего класса, для этого они опубликованы c, что является плохой идеей.

Эта функция также использует переменные колонки и строки и они глобальные, это тоже плохая идея, перемещать их локально в функцию (или лучше метод класса)

Когда вы печатаете содержимое в массиве есть дополнительный ',' после последнего элемента / последнего измерения, это не очень красиво

У вас есть утечки памяти, потому что ваш деструктор удаляет только глобальный массив, но не вложенные массивы

В ваших операторах + / - / * вы предполагаете, что м2 имеет те же размеры или больше, чем m1 , если это не тот случай, когда вы читаете из своих массивов с неопределенным поведением

В твоих стро uctor, вы делаете два для , но все может быть сделано только в одном

Конечно, main отсутствует для создания исполняемого файла и его запуска

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...