оператор перегрузки (<<) Cout в C ++ не работает, когда я вычесть две матрицы друг от друга - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь вычесть две матрицы и распечатать их в этом формате cout << (mat1 - mat2) << endl;но Cout не работает, он работает, когда я печатаю одну матрицу, и это код, я не думаю, что я должен сделать еще один оператор Cout для этого </p>

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

         struct matrix {
            int** data;
             int row, col;
          };

      void createMatrix (int row, int col, int num[], matrix& mat) {
           mat.row = row;
           mat.col = col;
           mat.data = new int* [row];

          for (int i = 0; i < row; i++)
               mat.data[i] = new int [col];

          for (int i = 0; i < row; i++){
              for (int j = 0; j < col; j++){
                  mat.data[i][j] = num[i * col + j];
          } ;


 ostream& operator<< (ostream& out  , matrix&  mat ) {

    for (int i =0 ; i< mat.row ; i++) {
        for (int j =0 ; j < mat.col ; j++) {
             out << mat.data [i] [j] << " " ;
        }
        cout << endl ;
       }
    return out ;
};

это функция для вычитания

      matrix operator-  (matrix mat1, matrix mat2) {
             matrix  mattt  ;
           if (mat1.row == mat2.row && mat1.col == mat2.col) {

               for (int i =0 ; i< mat1.row ; i++) {
                     for (int j =0 ; j < mat1.col ; j++) {
                     mattt.data[i][j] = ((mat1.data [i][j]) - (mat2.data [i][j]))  ;
               }
        }
   }

      else {
      cout  << " the matrixs dont have the same dimensions " << endl ;
 }
    return mattt ;

 };


   int main()  {
     int data1 [] = {1,2,3,4,5,6,7,8};
      int data2 [] = {13,233,3,4,5,6};
      int data3 [] = {10,100,10,100,10,100,10,100};

    matrix mat1, mat2, mat3;
    createMatrix (4, 2, data1, mat1);
    createMatrix (2, 3, data2, mat2);
    createMatrix (4, 2, data3, mat3);

     cout << mat1 << endl;
     cout << mat2 << endl;
     cout << mat3 << endl;

     cout << ( mat3 - mat1 ) << endl ;
   };

1 Ответ

0 голосов
/ 05 октября 2018

Список параметров функции для перегруженного оператора << необходимо изменить на

 ostream& operator<< (ostream& out, const matrix& mat)

Обратите внимание на const.

В противном случае анонимный временный (mat3 - mat1) не может связываться с перегрузкой.

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