我遇到的问题---大师级人物请帮忙!
请大家分析我的自编程序,就问题提出解决方案。
//TestTemplateAndPlanarArray.cpp
//Author:Meteor135
//Time:2003.5.17
#include <iostream.h>
const unsigned MAXROW = 3;//数组行数
const unsigned MAXCOL = 4;//数组列数
template <class T>
void Input(T *data)
//当把这些指针符号*都去掉后编译能通过,可是显然无法实现我的目标。
{
cout<<"Input a T:";
cin>>*data;
}
template <class T>
void Output(T data)
{
cout<<data;
}
//我的程序中为什么模板函数和实例函数都不可缺少?
//否则无法通过编译。
//现在不能通过编译的问题不是这里。
void Input(int *data)
{
cout<<"Input a int:";
cin>>*data;
}
void Output(int data)
{
cout<<data<<" ";
}
void Input(char *data)
{
cout<<"Input a char:";
cin>>*data;
}
void Output(char data)
{
cout<<data;
}
/*遍历二维数组*/
template <class T>
void TraversePlanarArray(T **array, void (*pFunc)(T)/*原打算这里用模板函数指针,但是编译通不过,有没有替代方案?*/)
{
T **pArray;
T *pEle;
unsigned row,col;
for(row=0,pArray=array;row<MAXROW;pArray = &array[++row])
{//for最后的语句可不可以改成row++,pArray++?
for(col=0,pEle=pArray[row];col<MAXCOL;col++,pEle++)
{
pFunc(*pEle);
}
cout<<endl;
}
}
/*初始化二维数组*/
template<class T>
void InitPlanarArray(T *array[MAXCOL])
{
TraversePlanarArray(array,Input<T>);//这里编译有错误!!如何修改?
}
/*输出二维数组*/
template<class T>
void OutputPlanarArray(T *array[MAXCOL])
{
TraversePlanarArray(array,Output<T>);
}
/*全程操作二维数组*/
template <class T>
void TestTemplateAndArray()
{
T **TArray = new T*[MAXROW];
for(unsigned i=0;i<MAXROW;i++)
TArray[i]=new T[MAXCOL];
InitPlanarArray(TArray);
OutputPlanarArray(TArray);
for(i=0;i<MAXROW;i++)
delete[] TArray[i];
delete[] TArray;
}
void main()
{
/*测试整型*/
TestTemplateAndArray<int>();
/*测试字符型*/
TestTemplateAndArray<char>();
}
//难道不可以定义指向模板函数的指针类型?
//如果可以,如何实现?
//还有,为什么下面的语法是错的?
//int a[12][10];
//int *p[10]=a;
//如何修改?