• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Marino

Alguem me ajuda a encontrar o erro!

4 mensagens neste tópico

#include <iostream>
using namespace std;

template <class T> class pair
{
T *values;
const int capacity;
int used;
public:
void putLast(const T &x);
pair(T n)
{
	used=0;
	capacity=n;
	values[n];
}
~pair()
	{
		delete [] values;
	}
bool isEmpty();

};

template<class T> void pair<T>::putLast(const T &x)   <---Erro nesta linha 
{
if(capacity!=used)
	values[used]=x;
}


int main()
{

cout << "erro";

return 0;
}

expected initializer before '<'  token

:wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu ate ajudava mas nao percebi 1 boi do teu programa...

sim usa templates, tb dei.... mas o k faz o teu programa...

mas 1 coisa k acho que n esta bem é

template<class T> void pair<T>::putLast(const T &x)   <---Erro nesta linha 
{
if(capacity!=used)
	values[used]=x;
}

nao sera antes:

 void pair<T>::putLast(const T &x)   
{
if(capacity!=used)
	values[used]=x;
}

nao programo desta forma... mas....  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

#include <iostream>
using namespace std;

template <class T> class pair
{
T *values;
const int capacity;
int used;
public:
void putLast(const T &x);
pair(T n)
{
	used=0;
	capacity=n;
	values[n];
}
~pair()
	{
		delete [] values;
	}
bool isEmpty();

};

template<class T> void pair<T>::putLast(const T &x)   <---Erro nesta linha 
{
if(capacity!=used)
	values[used]=x;
}


int main()
{

cout << "erro";

return 0;
}

expected initializer before '<'  token

:wallbash:

Sinceramente, o único erro que o meu compilador detectou é essa linha de comentário "<---Erro nesta linha"

Depois de ter eliminado, o programa correu sem problemas.

Mas para alem disso tens umas coisas males.

1.º Dizes que o capacity é uma constante

const int capacity;

e depois fazes isto:

	capacity=n;

O que não é aceitável, por isso apaga o const na declaração do capacity.

2.º Tens isto:

pair(T n)
{
	used=0;
	capacity=n;
	values[n];
}

Em que o T é o que te der na tola (int, double, float...)

Então deves querer forçar o input do n do tipo int (penso eu de que...)

O values é um apontador e fazendo isto "values[n]" não estas a fazer nada (isso devolve o valor que o apontador *(values + n) está a apontar no endereço de memória (value + n))

O que deves querer é criar um vector, para isso deves reservar primeiro a memória necessária para tal. Para isso usas o new.

Por exemplo, reservar um vector de double de dimensão 3:

new double(3)

O new devolve o endereço do vector, ou seja, a posição inicial do vector.

Assim, o que deves querer é isto:

values=new T(capacity);

E em cada new que colocas no teu código, tens de por um delete (isso tu já tens)

Dando um toque especial, o teu constructor fica:

pair(int n):
        capacity(n),
	used(0),
	values(new T(capacity))
{}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hm, tenho uma série de dúvidas sobre esse código.

Há algum enunciado que possas mostrar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora