我有以下模板:
template<class Matrix>
Matrix horizontal_join (const Matrix& m1, const Matrix& m2) {
ASSERT (rows (m1) == rows (m2), "unequal number of rows");
typedef typename Matrix::value_type Scalar;
Matrix r (rows (m1), nbcol (m1) + nbcol (m2));
for (unsigned i=0; i<nbrow(m1); i++) {
for (unsigned j=0; j<nbcol(m1); j++)
r(i,j)= m1(i,j);
for (unsigned j=0; j<nbcol(m2); j++)
r(i,j+nbcol(m1))= m2(i,j);
}
return r;
}
在一些名为“MATRDSE.m”的库中定义。 在文件“matrdse.hpp”中还定义了一个名为“matrsdse”的结构,它代表一种密集矩阵类型,并且有几个
-constructors,例如matrdse(int nrRows,int nrCols,const value_type * src,ByRow())
- 和方法,例如转置()。
我想在main函数中使用“horizontal_join”模板:
#include <matrdse.hpp>
#include <MATRDSE.m>
typedef matrdse<double> MxPoly;
int main{
double v[]={1,2,1,1,3,4,2,2,5,5,5,5,-2, 1,2,3,1, -2.8,-2.4,1,.2,5.8};
matrdse<double> A(4,4,v,ByRow());
std::cout<<"A="<<endl<<A<<endl;
matrdse<double> AT(A);
AT.transpose(); std::cout<<"Transpose(A)="<<endl<<AT<<endl;
MxPoly B;
B=horizontal_join<MxPoly>(A,AT);
cout<<B<<endl;
return 0;
}
一切正常,直到调用“horizontal_join”并在B中返回。 我收到以下编译错误:
main.cpp:168: error: 'horizontal_join' was not declared in this scope
main.cpp:168: error: expected primary-expression before '>' token
我不明白这个错误。在我看来,我不知道如何调用模板..
提前感谢您的任何建议, madalina
答案 0 :(得分:1)
这是实际的代码吗?你有#define
(一个坏主意)逆转。它应该是
#define MxPoly matrsde<double>
答案 1 :(得分:0)
我猜问题是这里的预处理器宏的组合(这是否正确,你是否在类型之前有宏的名称?):
#define matrdse<double> MxPoly;
和模板实例化在这里:
B=horizontal_join<MxPoly>(A,AT);
请注意,实例化行在预处理器中扩展为:
B=horizontal_join<matrdse<double>>(A,AT);
以>>
结尾的模板模板事件是一个众所周知的编译器错误,宏在此处被屏蔽。我想如果你将模板实例化行更改为它就会消失:
B=horizontal_join<MxPoly >(A,AT);
我建议你需要使用一些更一致的命名,并支持typedef over macro,因为它不会有这个问题:
typedef matrdse<double> MxPoly;
答案 2 :(得分:0)
<强> #define matrdse<double> MxPoly;
强>
一个分号到多