c++ - 具体方法模板

标签 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;

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

谢谢

最佳答案

已解决。

问题是

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

解决了我的问题

关于c++ - 具体方法模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13645232/

相关文章:

html - 页面底部不必要的巨大空白

java - 垃圾回收对这类程序的性能有害吗

c++ - 具有不同数组实现的子类

c++ - 在外联定义成员函数时,哪些限定符必须出现在声明/定义/两者中?

javascript - AngularJS 指令数据被覆盖

c++ - 跨不同命名空间的友元类。那可能吗

c++ - Wandevoorde&Jossutis 书中带有两个参数的非友元运算符+

c++ - 在 C++ 中使用非友元方法重载 I/O 运算符 | &istream 和 &ostream 函数

c++ - 如何设置 freeGLUT 和 GLEW 以在 Visual Studio 2013 中使用?

c++ - 为什么 ifstream 阅读器只读取图像文件的前 10 个字节?