创建头文件并运行它们

时间:2020-03-29 07:44:44

标签: c++ matrix

/ 在这里,我创建了一个头文件来实现矩阵表示。但是该文件未编译并显示消息“项目仍未生成”,说明如何在代码? /

#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 个答案:

答案 0 :(得分:2)

这里我创建了一个头文件来实现矩阵表示。但是文件没有编译

不编译头文件(扩展名h / hh),不编译源文件(扩展名c / cc / cpp ...)

Matrix.h:没有此类文件或目录

这意味着编译器找不到您的头文件,如果您没有将两个文件放在同一目录中,则需要指出如何查找头文件。具体方法取决于您使用的编译器/ IDE


其中有几句话可以做:

printMatrix 通常是您的类的成员,要使其具有功能,您需要访问类的内部成员,因为它们是公共的,这是一个坏主意。

此函数还使用变量 columns rows ,这些变量是全局变量,这也不是一个好主意,请将其局部放置到函数中(或者使用更好的方法班级的人

当您打印数组的内容时,在最后一个元素/最后一个维度之后还有一个额外的“”,这不是很漂亮

内存泄漏是因为析构函数仅删除全局数组,而不删除子数组

在运算符+ /-/ *中,您假设 m2 的尺寸相同或大于 m1 ,如果不是这样,您可以使用不确定的行为

在构造函数中,您需要做两个 ,但是所有操作只能一次完成

当然缺少 main 来生成可执行文件并运行它