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!
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!