2017-12-07 23 views
-2

주어진 행렬에서 일부 값을 뺍니다. 어떻게 그 연산자를 오버로드 할 수 있습니까?C++ 연산자 오버로드 <double> - <Matrix>

MAIN.CPP

Matrix<double> m(10, 5); 

auto r = 1.0 - m; //error: return type specified for 'operator double' 

matrix.hpp

template <typename T> 
class Matrix { 
public: 
    Matrix operator double(T val) { 
    Matrix tmp(rows, cols); 

    for (unsigned int i = 0; i < rows; i++) 
     for (unsigned int j = 0; j < cols; j++) { 
     const unsigned int idx = VecToIdx({i, j}); 
     tmp[idx] = val - this[idx]; 
     } 

    return tmp; 
    } 
} 
+0

'운영자 double'가의'를 반환해야 변환 연산자는 다음과 같습니다 후자의 경우

, 당신은 빼기 연산자가 아닌 변환 연산자, 예를 오버로드 할 필요 double''은'Matrix'가 아니며 – user463035818

+0

연산자'double'은 행렬을 double로 변환하지만 Matrix에는 이중 변환하지 않습니다. double을 취하는 행렬 생성자를 가지고 있다는 뜻입니까? – Arkadiy

+0

수 없습니다! 그러나 '연산자 - (double, Matrix)'를 오버로드 할 수 있습니다. – user1810087

답변

1

귀하의 코드는 double에서 Matrix을 빼기 위해 노력하고 있지만, 귀하의 질문에 뺄 요청 a doubleMatrix 대신. 그것들은 두 가지 다른 작업입니다. 당신은 정말로 무엇을하고 싶습니까?

template <typename T> 
class Matrix { 
public: 
    Matrix operator- (T val) { 
     Matrix tmp(rows, cols); 
     for (unsigned int i = 0; i < rows; i++) 
      for (unsigned int j = 0; j < cols; j++) { 
       const unsigned int idx = VecToIdx({i, j}); 
       tmp[idx] = (*this)[idx] - val; 
      } 
     return tmp; 
    } 
}; 

Matrix<double> m(10, 5); 

auto r = m - 1.0;