/ 在这里,我创建了一个头文件来实现矩阵表示。但是该文件未编译并显示消息“项目仍未生成”,说明如何在代码? /
#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;
}
答案 0 :(得分:2)
这里我创建了一个头文件来实现矩阵表示。但是文件没有编译
不编译头文件(扩展名h / hh),不编译源文件(扩展名c / cc / cpp ...)
Matrix.h:没有此类文件或目录
这意味着编译器找不到您的头文件,如果您没有将两个文件放在同一目录中,则需要指出如何查找头文件。具体方法取决于您使用的编译器/ IDE
其中有几句话可以做:
printMatrix 通常是您的类的成员,要使其具有功能,您需要访问类的内部成员,因为它们是公共的,这是一个坏主意。>
此函数还使用变量 columns 和 rows ,这些变量是全局变量,这也不是一个好主意,请将其局部放置到函数中(或者使用更好的方法班级的人
当您打印数组的内容时,在最后一个元素/最后一个维度之后还有一个额外的“”,这不是很漂亮
内存泄漏是因为析构函数仅删除全局数组,而不删除子数组
在运算符+ /-/ *中,您假设 m2 的尺寸相同或大于 m1 ,如果不是这样,您可以使用不确定的行为
在构造函数中,您需要做两个 ,但是所有操作只能一次完成
当然缺少 main 来生成可执行文件并运行它