2015-05-16 3 views
0

Я новичок в C++ и в настоящее время я пытаюсь реализовать 2D-матрицу из классов, это мой текущий код, сейчас я не могу создать экземпляр объекта матрицы, пожалуйста оставьте мне отзыв, что мне нужно исправить.Внедрение 2D-матрицы из классов C++

* Обновлено: Я установил некоторые из кода, но матрица не печатает ничего

#include <iostream> 
#include <cstdlib> 
using namespace std; 

class Matrix 
{ 
    public: 
     Matrix(); //Default constructor 
     Matrix(int *row, int *col); //Main constructor 
     void setVal(int row, int col, int val); //Method to set the val of [i,j]th-entry 
     void printMatrix(); //Method to display the matrix 
     ~Matrix(); //Destructor 

    private: 
     int row, col; 
     double **matrix; 

     //allocate the array 
     void allocArray() 
     { 
      matrix = new double *[*row]; 
      for (int count = 0; count < *row; count++) 
       *(matrix + count) = new double[*col]; 
     } 
}; 

//Default constructor 
Matrix::Matrix() : Matrix(0,0) {} 

//Main construcor 
Matrix::Matrix(int *row, int *col) 
{ 
    allocArray(); 
    for (int i=0; i < *row; i++) 
    { 
     for (int j=0; j < *col; j++) 
     { 
      *(*(matrix + i) + j) = 0; 
     } 
    } 
} 

//destructor 
Matrix::~Matrix() 
{ 
    for(int i = 0 ; i < row ; i++) 
     delete [] *(matrix + i) ; 
    delete [] matrix; 
} 

//SetVal function 
void Matrix::setVal(int row, int col, int val) 
{ 
    matrix[row][col] = val; 
} 

//printMatrix function 
void Matrix::printMatrix() 
{ 
    for(int i = 0; i < row; i++) 
    { 
     for(int j = 0; j < col; j++) 
      cout << *(*(matrix + i) + j) << "\t"; 
     cout << endl; 
    } 
} 


int main() 
{ 
    int d1 = 2; 
    int d2 = 2; 

    //create 4x3 dynamic 2d array 
    Matrix object(&d1,&d2); 

    object.printMatrix(); 

    return 0; 
} 
+0

Вы должны просмотреть [C++ FAQ для матрицы.] (Https://www.google.com/search?q=C%2B%2B+FAQ+matrix&ie=utf-8&oe=utf-8) –

ответ

2

Ваша линия

Matrix object = new int **Matrix(d1,d2); 

неправильно. Используйте просто

Matrix object(d1,d2); 

нет необходимости в Java-подобный синтаксис, который на самом деле в C++ означает динамическое распределение: Matrix* object = new Matrix(d1,d2);

+0

Я попытался скомпилировать его используя онлайн-среду IDE, но получил эту ошибку «Ошибка сегментации (сброс ядра)» код: http://goo.gl/Nixxen – Casper

+0

@Capser Первый шаг - сделать его компиляцией. Segfault обычно происходит из-за плохого распределения/доступа за пределы. Попробуйте отладить свой код и убедитесь, что ваши указатели действительны, и вы выделяете для них память. В частности, в конструкторе вы должны сначала вызвать 'allocArray()' (подумайте о параметрах 'm' и' n', в основном вы должны установить их своим конструктором) и только после инициализации 'p'. Вы делаете это в обратном порядке, поэтому сначала пишете в памяти, которая не принадлежит вам, и только после выделения памяти. – vsoftco

+0

Я исправил его, ошибка исчезла, но нет выхода – Casper

1

Вместо Matrix object = new int **Matrix(d1,d2); использование Matrix* object = new Matrix(d1,d2); Кроме того, вы должны будете использовать object->printMatrix(); вместо object.printMatrix();

Смежные вопросы