特定方法的模板

时间:2012-11-30 12:25:38

标签: c++ templates friend

我正在为矩阵创建一个类。 这是一个带模板的作业,所以我创建了两种乘法方法,一种是矩阵相等,另一种是我只有[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);
...
};

它就像一个魅力,

但是当我试图实施第二个时我遇到了一些问题,我解决了它:

#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;

我不知道我是否正确实施了这个模板。

由于

1 个答案:

答案 0 :(得分:1)

解决。

问题是

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

我不能使用2个模板(不是我的情况下)使用相同的“vars”

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

它解决了我的问题