templates C++

Iniciado por Diego_Rocha, 21 de Maio de 2007, 13:25

tópico anterior - próximo tópico

Diego_Rocha

Ae pessoal é o seguinte estou estudando templates e gostaria de saber onde esta o erro nesse codigo


#include <string>
#include <iostream>
using namespace std;


template<typename T, int VALOR = 125>
T teste(T a, T b)
{
cout << "Esse é VALOR = "<< VALOR<< endl;
cout << "Esse é a + b = "<< a + b<< endl;
}

template<class T, int DIM = 25>
class Stack{
T dado[DIM];
unsigned size;
public:
Stack(){ size = 0; }
~Stack(){ cout<< size<< endl; }
bool empty()const{ return size == 0; }
T& top(){ return dado[size - 1]; }
T& botton(){ return dado[size - (size + 1)]; }
void push(const T &p){ dado[size++] = p; }
void pop(){ --size; }
};

int main()
{
int a=5, b=10;
teste<int, 32>(a, b);

Stack<double, 55> Double_Stack;
Double_Stack.push( 221 );
cout << Double_Stack.top()<< endl;
}


quando compilo sai esse erro


rocha:~# g++ template.cpp -o template
template.cpp:7: error: default template arguments may not be used in function templates


se alguem puder me dar uma dica de onde esta o erro ficaria grato,

Diego_Rocha

#1
Pessoal ja resolvi, era um erro bobo, não podia iniciar a variavel valor com um valor


template<typename T, int VALOR = 125>   <---- errado
template<typename T, int VALOR >     <----- certo


só que acho engraçado funcionar em uma classe, se alguem souber me explicar porque


template<class T, int DIM = 25>   <--- certo


***aproveitei para criador um hello world que me deu algumas dores de cabeça XD


#include <string>
#include <iostream>
using namespace std;

template<class T, int num_print = 10> class Hello_World {
public:
T _imprimi;
int __num;
void print(){
__num = num_print;
while(__num != 0){
cout<< _imprimi.show_hello_world()<< endl;
--__num;
}
}
};

class My_Hello_World
{
public:
string hello, world;
My_Hello_World(){ hello = "Hello"; world = "World"; }
virtual ~My_Hello_World(){}
string show_hello_world(){
string msg;
msg = hello + " " + world;
return msg;
}
};

int main(){
Hello_World<My_Hello_World, 20> __hello;
__hello.print();
return 0;
}


agora pergunto, como herdo uma classe que usa template ?? ja andei vendo em muito lugares e nenhum tem uma explicação de facil entendimento se alguem puder me dar um exemplo t++