質問: term; } } } }; } ``` ### 質問内容 c++初心者です。 上記のコードで2次元行列の内積を表現したいのですが コンパイル時に下記のようなエラーが発生します。 おそらくmatrix_3.dot(matrix_1,matrix_2); の引数のメモリサイズがそれぞれ違うのかな(トンチンカンなこと言ってたらごめんなさい)と思います がエラーの回避方法がわからず困っています。 どうかご教授おねがいします。 ``` main.cpp:14:35: error: no matching function for call to ‘matrix::Matrix_2d::dot(matrix::Matrix_2d&, matrix::Matrix_2d&)’ matrix_3.dot(matrix_1,matrix_2); ^ In file included from ./main.hpp:8:0, from main.cpp:1: ```
回答: `Matrix_2d`はtemplateクラスなので、直接`dot`の引数の型には使えません。`dot`をテンプレートメンバー関数にすれば、例えば次のように書けます。 ``` #ifndef MATRIX_HPP #define MATRIX_HPP #include namespace matrix { template class Matrix_2d { //行列オブジェクト ... # 省略 template void dot(Matrix_2d in_1, Matrix_2d in_2) { ... # 省略 } }; } // namespace matrix #endif // MATRIX_HPP ``` **気になった点** * include guardの使い方がおかしい・・・。 * ~~行列の積は`[p, q] * [q, r]` (p, q, rは正の整数)でしか定義されないので、上のテンプレートメンバー関数はもう少し制限かけておいたほうがよい。~~ * たぶん計算結果おかしい。