【发布时间】:2012-11-30 12:25:37
【问题描述】:
我正在为矩阵创建一个类。 这是一个带有模板的作业,所以我创建了两种乘法方法,一种是矩阵相等,另一种是当我只有 [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;
我不知道我是否正确地实现了这个模板。
谢谢
【问题讨论】:
-
你说两个不同的矩阵看起来像
[x][y]和[z][y],但是operator*的签名看起来像[x][y]和[y][z]。 -
对不起,它的 [x][y] [y][z]。我会编辑
-
朋友好像被忽略了