|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
|
[C++] Ereditarieta e template....... problemi..
Ho un problemino c++ con i template .... è un pò complesso ....
Allora ho un'interfaccia Codice:
class I
{
public:
void fI()=0;
};
Codice:
class I2:public I
{
public:
void fI2()=0;
};
Codice:
class IImpl:public I
{
public:
void fI(){.....}
};
Codice:
template<typename T>
class I2Impl:public I2,public IImpl
{
public:
void fI2(){/*implementazione con template!!*/}
};
per farlo funzionare o duvuto fare: Codice:
template<typename T>
class I2Impl:public I2,public IImpl
{
public:
void fi(){IImpl::fi()}
void fI2(){/*implementazione con template!!*/}
};
cosa c'è che mi sfugge ?? nn dovrei riscrivere la chiamata ad una funzione che gia ho!! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Primo errore: devi dichiarare fI e fI2 virtual (virtual void fI()=0).
Probabilmente pero' e' solo un errore di trascrizione. Il motivo principale per cui non funziona e' pero' dovuto la fatto che quando hai derivato da I non hai specificato la derivazione di tipo virtual Codice:
class I2 : virtual public I {
...
solo una delle due e il compilatore si lamenta di questo.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele Ultima modifica di marco.r : 17-11-2007 alle 12:15. Motivo: ops, errore |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
|
Si in effetti ci sono una serie di errori di tracrizione
Ho messo i virtual .... ma nulla stesso problema ... |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Codice:
#include <iostream>
using namespace std;
class I
{
public:
virtual void fI()=0;
};
class I2:virtual public I
{
public:
virtual void fI2()=0;
};
class IImpl:virtual public I
{
public:
void fI(){ cerr << "fI()" << endl;}
};
template<typename T>
class I2Impl:public I2,public IImpl
{
public:
void fI2(){ cerr << T(0) << endl; }
};
int main()
{
I2Impl<bool> x;
x.fI();
x.fI2();
}
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
|
Grazie avevi ragione ...... avevo messo "virtual" solo sull'interfaccia figlia e non nell'implementazione adesso l'ho messo e funziona tutto grazie!!!
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:17.



















