无法从 *const 转换为 &in += 运算符

  • 本文关键字:in 运算符 转换 const c++
  • 更新时间 :
  • 英文 :


在我决定放弃和睡觉之前,我盯着这个看了一整晚——今天又看了几个小时,我仍然没有看到它。我无法弄清楚如何更改const -ness和参数以正确返回(在操作符+=上)。任何帮助吗?

operator+=过载的return this语句处弹出错误。

#include <iostream>
#include <vector>
template <typename T> class Matrix {
private:
    unsigned rows, cols;
public:
    Matrix();
    ~Matrix();
    Matrix(const Matrix<T>& rhs);
    Matrix(unsigned _rows, unsigned _cols);
    std::vector<std::vector<T>> matrix;
    Matrix<T>& operator=(Matrix<T> rhs);
    //Matrix mathematical operations                                                                                                                                                                                               
    Matrix<T> operator+(const Matrix<T>& rhs);
    Matrix<T>& operator+=(const Matrix<T>& rhs);
    // Access the individual elements                                                                                                                                                                                               
    T& operator()(const unsigned& row, const unsigned& col);
    const T& operator()(const unsigned& row, const unsigned& col) const;
    // Access the row and column sizes                                                                                                                                                                                              
    unsigned get_rows() const;
    unsigned get_cols() const;
    void swap(Matrix<T>& rhs);
};
template<typename T>
Matrix<T>::Matrix() {}
template<typename T>
Matrix<T>::~Matrix() {}
// Parameter Constructor                                                                                                                                                      
template<typename T>
Matrix<T>::Matrix(unsigned _rows, unsigned _cols) {
    matrix.resize(_rows);
    for (unsigned i = 0; i < _rows; i++)
        matrix[i].resize(_cols, 1); // change back to 0 after debug
    rows = _rows;
    cols = _cols;
}
template<typename T>
Matrix<T>& Matrix<T>::operator=(Matrix<T> rhs) {
    swap(rhs);
    return *this;
}
template<typename T>
Matrix<T> Matrix<T>::operator+(const Matrix<T>& rhs) {
    Matrix<T> result(*this);
    result += rhs;
    return result;
}
template<typename T>
Matrix<T>& Matrix<T>::operator+=(const Matrix<T>& rhs) {
    for (unsigned i = 0; i < rows; i++) {
        for (unsigned j = 0; j < cols; j++) {
            this->matrix[i][j] += rhs(i, j);
        }
    }
    return this; // error pops up here
}
// Access the individual elements                                                                                                                                             
template<typename T>
T& Matrix<T>::operator()(const unsigned& row, const unsigned& col) {
    return this->matrix[row][col];
}
// Access the individual elements (const)                                                                                                                                     
template<typename T>
const T& Matrix<T>::operator()(const unsigned& row, const unsigned& col) const{
    return this->matrix[row][col];
}
// Get the number of rows of the matrix                                                                                                                                       
template<typename T>
unsigned Matrix<T>::get_rows() const {
    return this->rows;
}
//Get the number of columns of the matrix                                                                                                                                    
template<typename T>
unsigned Matrix<T>::get_cols() const {
    return this->cols;
}
template<typename T>
void Matrix<T>::swap(Matrix<T>& rhs) {
    using std::swap;
    swap(this->rows, rhs.rows);
    swap(this->cols, rhs.cols);
    swap(this->matrix, rhs.matrix);
}

// for debugging
template<typename T>
void print_matrix(Matrix<T>& matrix) {
    for (int i = 0; i < matrix.get_rows(); i++) {
        for (int j = 0; j < matrix.get_cols(); j++) {
            std::cout << matrix(i, j) << " ";
        }
        std::cout << " " << std::endl;
    }
}
int main(int argc, char **argv) {
    Matrix<double> matrix1(5, 5);
    Matrix<double> matrix2(5, 5);
    // Start testing
    Matrix<double> matrix3 = matrix1 + matrix2;
    print_matrix(matrix1);
    std::getchar();
    return 0;
}

+=操作符中,您可能需要:

Matrix<T>& Matrix<T>::operator+=(const Matrix<T>& rhs) {
    //....
    return *this;
          //^^
}

链接器错误是因为您没有定义:

Matrix(const Matrix<T>& rhs);

最新更新