一个很简单的问题调试了好久,不过还算有收获。
现总结一下:
1. vs2008中 math.h 头文件中没有定义M_PI,如果程序确实要用M_PI则需自己定义。#define M_PI 3.14159265358979323846
2. 如果程序中自己定义的函数比较多,为了调试方便使用方便,可以将这些函数都放到一个文件里面,从而实现了真正的代码可重用性,这个函数文件叫做模板,模板可以分为两种:函数模板,类模板。这里遇到的是函数模板。
函数模板的一般形式如下:
Template <class或者也可以用typename T>
返回类型 函数名(形参表)
{//函数定义体 }
说明: template是一个声明模板的关键字,表示声明一个模板关键字class不能省略,如果类型形参多余一个 ,每个形参前都要加class <类型 形参表>可以包含基本数据类型可以包含类类型.
template<class T> void generate_transform_matrix(int N, T *Psi)
{
assert(Psi!=NULL);
for(int i=0; i<N; i++)
{// for each frequency component
for(int j=0; j<N; j++)
{// for each element
}
}
}
出现问题的原因是对模板格式不知道,直接将函数放到模板文件里面了,导致编译出问题,一个劲的提示函数中用到的一些函数找不到,如sin()等。将函数的格式改正之后,编译即通过了。