Autor Tópico: templates C++  (Lida 2125 vezes)

Offline Diego_Rocha

  • Usuário Ubuntu
  • *
  • Mensagens: 372
  • Slackware current
    • Ver perfil
templates C++
« Online: 21 de Maio de 2007, 13:25 »
Ae pessoal é o seguinte estou estudando templates e gostaria de saber onde esta o erro nesse codigo

Código: [Selecionar]
#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

Código: [Selecionar]
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,

Offline Diego_Rocha

  • Usuário Ubuntu
  • *
  • Mensagens: 372
  • Slackware current
    • Ver perfil
Re: templates C++
« Resposta #1 Online: 21 de Maio de 2007, 15:18 »
Pessoal ja resolvi, era um erro bobo, não podia iniciar a variavel valor com um valor

Código: [Selecionar]
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

Código: [Selecionar]
template<class T, int DIM = 25>   <--- certo

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

Código: [Selecionar]
#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++
« Última modificação: 21 de Maio de 2007, 19:06 por Diego_Rocha »