1

行列のクラスを作成しています。これはテンプレートを使った宿題なので、乗算の方法を2つ作成しました。一方は行列が等しい場合、もう一方は[x] [y][y][z]だけの場合です。それから私は最初のものを作成しました

#define TEMPLATEMATRIX template<class T, int C, int R>
TEMPLATEMATRIX Matrix<T, C, R> operator* (Matrix<T, C, R> a, Matrix<T, C, R> b);
TEMPLATEMATRIX class Matrix{
....
friend Matrix<T, C, R> operator* <>(Matrix<T, C, R> a, Matrix<T, C, R> b);
...
};

そしてそれは魅力のように機能します、

しかし、2番目のものを実装しようとしたときに、いくつかの問題が発生しました。次の方法で解決しました。

#define TEMPLATEMATRIXT template<class T, int C, int R, int R1>
TEMPLATEMATRIXT Matrix<T, R1, R> operator* (Matrix<T, R1, C> a, Matrix<T, C, R> b);

TEMPLATEMATRIX class Matrix{
....
template<int R1> friend Matrix<T, R1, R> operator* (Matrix<T, R1, C> a, Matrix<T, C, R> b);
...
};

//Multiplication
TEMPLATEMATRIXT Matrix<T, R1, R> operator* (Matrix<T, R1, C> a, Matrix<T, C, R> b){
  Matrix<T, R1, R> t;
  ...
  return t;
}

コンパイルしますが、コンパイルすると。

Undefined symbols for architecture x86_64:
  "Matrix<int, 100, 19> operator*<100>(Matrix<int, 100, 123>, Matrix<int, 123, 19>)", referenced from:
      _main in cciAzuMs.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

メソッドが実装されていないように。

main()でどのように行うか

  Matrix<int, 123, 19> ta2;

  Matrix<int, 100, 123> ta;
  Matrix<int, 100, 19> rr=ta*ta2;

このテンプレートを正しく実装したかどうかはわかりません。

ありがとう

4

1 に答える 1

1

解決しました。

問題は

#define TEMPLATEMATRIX template<class T, int C, int R>
#define TEMPLATEMATRIXT template<class T, int C, int R, int R1>

同じ「vars」で2つのテンプレート(私の場合はそうではありません)を使用できません

#define TEMPLATEMATRIX template<class T, int C, int R>
#define TEMPLATEMATRIXT template<class T2, int C2, int R2, int R1>

それは私の問題を解決しました

于 2012-11-30T17:15:47.150 に答える