2

テンプレートを使用して行う必要がある宿題をしています。これはマトリックス クラスです。

の 1 つは、 をオーバーロードするように指示するoperator ()(int r, int c);ので、 を使用してデータにアクセスしたり、 でデータをobj(a, b);変更したりできますobj(a, b)=100;

私のクラスのテンプレートは次のとおりですtemplate<class T, int C, int R>; 次に、パブリックスコープのクラス内に作成しました:

T& operator()(int r, int c);//LINE 16

実装は簡単です。

私は2つの方法で試しました:

template <class T>
T& Matrix::operator()(int r, int c){
    return matrixData[r][c];
}

template <class T, int C, int R>
T& Matrix::operator()(int r, int c){ 
    return matrixData[r][c];
}

最後の1つでは、次のようなエラーが表示されます。

16: Error: expected type-specifier before '(' token

上記の 16 行目にはコメント エラーがあります。

no 'T& Matrix<T, C, R>::operator()(int, int)' member function declared in class 'Matrix<T, C, R>'
4

2 に答える 2

3

クラスはtemplate<class T, int C, int R> class Matrix {...}次のとおりです。

以下は私にとってはうまくいきます:

#include <iostream>

template<typename T, int R, int C>
class Matrix {
  T data[R][C];
public:
  T& operator()(int r, int c);
};

template <typename T, int R, int C>
T& Matrix<T, R, C>::operator()(int r, int c) {
  return data[r][c];
}

int main() {
  Matrix<int, 3, 4> m;
  m(0, 1) = 42;
  std::cout << m(0, 1) << std::endl;
}
于 2012-11-26T16:56:11.953 に答える
1

私が正しく理解している場合、次のタイプがありませんMatrix:

template <class T>
T& Matrix<T>::operator()(int r, int c){
    return matrixData[r][c];
}

template <class T, int C, int R>
T& Matrix<T>::operator()(int r, int c){ 
    return matrixData[r][c];
}
于 2012-11-26T16:56:58.140 に答える