Вот тут в начале создаю шаблон
Код:
#include "stdafx.h"
#include"iostream"
using namespace std;
template<class T>
void sw(&T){
for(int i=0;i<(int)(sizeof(T)/(2*sizeof(T[0])));i++)
swap(T[i],T[i+1]);
}
class massiv{
public:
massiv(){}
~massiv(){
if(i!=NULL) delete [] i;
else if(li!=NULL) delete [] li;
else if(f!=NULL) delete [] f;
else if(d!=NULL) delete [] d;
else if(ld!=NULL) delete [] ld;
else if(b!=NULL) delete [] b;
else if(c!=NULL) delete [] c;
}
char*symbol(int i){
switch(i){
case 1:{
return "int";
break;
}
case 2:{
return "long int";
break;
}
case 3:{
return "float";
break;
}
case 4:{
return "double";
break;
}
case 5:{
return "long double";
break;
}
case 6:{
return "bool";
break;
}
case 7:{
return "char";
break;
}
}}
void initialize(int h){
switch(i){
case 1:{
i=new int[hh];
for(int ii=0;i<hh;i++)
cin>>i[ii];
break;
}
case 2:{
li=new long int[hh];
for(int ii=0;i<hh;i++)
cin>>li[ii];
break;
}
case 3:{
f=new float[hh];
for(int ii=0;i<hh;i++)
cin>>f[ii];
break;
}
case 4:{
d=new double[hh];
for(int ii=0;i<hh;i++)
cin>>d[ii];
break;
}
case 5:{
ld=new long double[hh];
for(int ii=0;i<hh;i++)
cin>>ld[ii];
break;
}
case 6:{
b=new bool[hh];
for(int ii=0;i<hh;i++)
cin>>b[ii];
break;
}
case 7:{
c=new char[hh];
for(int ii=0;i<hh;i++)
cin>>c[ii];
break;
}
}}
void enter(){
cout<<"Выберите тип данных из которых будет состоять массив"<<endl;
cout<<"1 int"<<endl<<"2 long int"<<endl<<"3 float"<<endl<<"4 double"<<endl<<"5 long double"<<endl<<"6 bool"<<endl<<"7 char"<<endl;
cin>>h;
cout<<"Вы выбрали "<<symbol(h)<<endl<<endl;
cout<<"Из скольки элементов будет состоять массив ?"<<endl;
cin>>hh;
cout<<"Введите массив " <<symbol(h)<<" из "<<hh<<" элементов"<<endl;
initialize(h);
}
void out(){
for(int ii=0;ii<hh;ii++)
if(i!=NULL) cout<<i[ii]<<" ";
else if(li!=NULL) cout<<li[ii]<<" ";
else if(f!=NULL) cout<<f[ii]<<" ";
else if(d!=NULL) cout<<d[ii]<<" ";
else if(ld!=NULL) cout<<ld[ii]<<" ";
else if(b!=NULL) cout<<b[ii]<<" ";
else if(c!=NULL) cout<<c[ii]<<" ";
cout<<endl;
}
void s(){switch(i){
case 1:{
sw(i);
break;
}
case 2:{
sw(li);
break;
}
case 3:{
sw(f);
break;
}
case 4:{
sw(d);
break;
}
case 5:{
sw(ld);
break;
}
case 6:{
sw(b);
break;
}
case 7:{
sw(c);
break;
}
}
}
private:
int hh,h;
int*i;
long int*li;
float*f;
double*d;
long double*ld;
bool*b;
char*c;
};
int main()
{
setlocale(LC_ALL,"russian");
bool not_exit=1;
while(not_exit){
cout<<"1 Ввести массив "<<endl<<"2 Выход"<<endl;
int u=0;
cin>>u;
switch(u){
case 1:{
massiv b;
b.enter();
b.s();
cout<<"Обработанный массив :"<<endl;
b.out();
system("pause");
break;
}
case 2:{
not_exit=0;
break;
}
}
}
return 0;
}
А вот тут компилятору много кое что не нравится
Код:
1>------ Build started: Project: laba7, Configuration: Debug Win32 ------
1> laba7.cpp
1>laba7.cpp(8): error C2275: 'T' : illegal use of this type as an expression
1>laba7.cpp(8): error C2275: 'T' : illegal use of this type as an expression
1>laba7.cpp(11): error C2182: 'sw' : illegal use of type 'void'
1>laba7.cpp(11): error C2998: 'int sw' : cannot be a template definition
1>laba7.cpp(179): error C2065: 'b' : undeclared identifier
1>laba7.cpp(180): error C2065: 'b' : undeclared identifier
1>laba7.cpp(182): error C2065: 'b' : undeclared identifier
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Подскажите может я в синтаксисе шаблона что то напутал ?
И что с объектом b .. я его объявил и класс massiv описал