PDA

View Full Version : [C++] domanda sui Template


Morfeo XP
18-01-2008, 20:46
Salve a tutti

Avrei un quesito da porvi...

In c++, quando creo una classe generica (cioč utilizzando i template), posso separare la dichiarazione della classe (in un file .h) dall'implementazione (in un file .cpp)?

In pratica quando faccio quanto separo una classe generica in due file, ed includo il file .h nel main, si verifica un errore in fase di compliazione.

Inoltre ho letto da qualche parte, che in effetti ha poco senso dividere una classe generica in due file, ma la dichiarazione e l'implementazione andrebbe fatta nel file .h.

Ecco un esempio...

Queue.h
#ifndef QUEUE_H_
#define QUEUE_H_

template <class QType >class Queue
{
QType q[20];
int sloc, rloc;

public:
Queue();
void qput(QType);
QType qget();
};

#endif /*QUEUE_H_*/

Queue.cpp
#include "Queue.h"

template <class QType> Queue<QType>::Queue()
{
sloc = 0;
rloc = 0;
}

template <class QType> void Queue<QType>::qput(QType i)
{
if(sloc==20)
{
return;
}
sloc++;
q[sloc] = i;
}

template <class QType> QType Queue<QType>::qget()
{
if(rloc == sloc)
{
return 0;
}
rloc++;
return q[rloc];
}

main.cpp
#include "Queue.h"
#include <iostream>

using namespace std;
int main()
{
Queue<int> coda;
coda.qput(10);
cout<<coda.qget();
return 0;

}


Grazie!

fek
18-01-2008, 21:05
In c++, quando creo una classe generica (cioč utilizzando i template), posso separare la dichiarazione della classe (in un file .h) dall'implementazione (in un file .cpp)?

No. Dichiarazione e implementazione del template devono essere nella stessa unita' di traslazione dove e' instanziato. Tradotto in italiano: tutto nel .hpp

Morfeo XP
18-01-2008, 21:27
Ti ringrazio :)