我创建了下面的问题(现在),它将计算行列式或矩阵。(我将展开它,这就是我输入维数和矩阵的原因)。
编辑
错误:“mat”未在此范围内声明
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
class matrix {
private:
int rows,columns;
public:
//constructor
matrix ()
{}
matrix(int _rows,int _columns) : rows(_rows),columns(_columns){
{
int **mat=new int *[rows];
for (int r = 0; r < rows; ++r)
mat[r] = new int[columns];
}
}
//destructor
~matrix(){
for (int r = 0; r < rows; ++r)
delete[] mat[r];
delete[] mat;
}
//void allocate();
void getdata() {
cout <<"Enter number of rows :"<<endl;
cin >>rows;
cout <<"Enter number of columns : "<<endl;
cin >> columns;
}
void fill();
double determinant();
void showdata(){
}
};
int main()
{
matrix a;
a.getdata();
a.fill();
a.determinant();
return 0;
}
//fills the matrix
void matrix ::fill(){
for(int i=0;i<rows;i++) {
for(int j=0;j<columns;j++){
cout <<"Enter the elements in a line separated by whitespace :"<<endl;
cin >>mat[i][j];
}
}
}
//calculate the determinant
double matrix :: determinant (){
double det;
det = mat[rows][columns]*mat[rows+1][columns+1] - mat[rows][columns+1]*mat[rows+1][columns];
cout <<"The determinant of matrix is :"<<det<<endl;}发布于 2011-02-28 12:35:16
您要做的是将mat初始化为一个动态大小的数组。这不能像编译器告诉您的那样在常量表达式中完成。
您必须为matrix类编写一个构造函数,该构造函数将以rows作为参数并包含mat=new int *[rows]行。注意,您还需要初始化mat的每一行;您的allocate方法就是这样做的,应该从构造函数中调用。
发布于 2011-02-28 12:40:08
new操作符动态地分配内存(即从空闲存储)。因此,在本例中将其返回地址分配给成员变量应该是任何成员函数的一部分,而不是类声明的一部分。它可以是getdata()成员函数的一部分。
而且,类需要一个析构函数,因为它正在管理资源。
编辑1 :
问题-
int **mat=new int *[rows];,是参数化构造函数中的一个局部变量,一旦调用该构造函数就超出了作用域,从而引发内存泄漏。matrix a;,将调用默认构造函数。即,matrix::matrix(),没有参数的构造函数。但是,您正在参数化构造函数中进行初始化。为了让一切正常运转,试试这个-
class matrix
{
int **mat;
// ...
public:
matrix()
{
cout <<"Enter number of rows :"<<endl;
cin >>rows;
cout <<"Enter number of columns : "<<endl;
cin >> columns;
mat=new int *[rows];
for (int i=0;i<rows;i++) {
mat[i]=new int [columns];
}
}
// And no more, getdata() member function is required. Avoid it's call in main()
};希望能帮上忙!
发布于 2011-02-28 12:40:16
考虑到您的矩阵有可变大小,并且您的矩阵数据将在堆中,您必须在构造函数中或通过延迟实例化来初始化矩阵数据。我以前曾回答过一个关于创建矩阵的问题。这是给它的链接。如果您查看这里,您可以观察到,在已知矩阵的大小之前,没有初始化数据,就像在您的例子中一样,数据是在堆内存中创建的。
编辑:C++不允许在声明成员变量时初始化堆中的成员变量。在您的例子中,矩阵的大小首先是不知道的,因为要用正确的内存大小来创建mat。正如这里的每个人所提到的,使用构造函数来创建mat实例。
https://stackoverflow.com/questions/5141989
复制相似问题