|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2004
Città: goettingen
Messaggi: 275
|
[C++] ereditarietà
Ho un dubbio abbastanza specifico sull'ereditarietà. In main.cpp definisco:
class Child: public Parent { public: void eval(real *values, const real *x) {anything} }; il cui unico scopo è di definire eval che era virtual in Parent. Ora sempre in main.ccp scrivo: Child obj; Solver pde(obj); avendo definito in sover.cpp il seguente costruttore: Solver::Solver(Parent& input) { input.eval(values,x); } ottengo un errore perché eval è visto come quella del genitore, cioè come virtual. D'altro canto non posso chiedere un Child& come argomento perché Solver non sa della sua esistenza.. potrei rimediare mettendoci una pezza, tuttavia sono interessato a capire come è meglio che io risolva la situazione secondo la logica di C++. Grazie!
__________________
La prima necessità dell'uomo è il superfluo. Albert Einstein |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
virtual rimane nella gerarchia anche se non viene più esplicitato.
Ma quella chiamata, proprio perché usi virtual dovrebbe riferirsi alla eval di Child... |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2004
Città: goettingen
Messaggi: 275
|
purtroppo nelle librerie che sto usando virtual è definito nell'header di Parent, ma poi in parent.cpp è definito come il solo messaggio di errore che dice che va overloaded.. può essere questo che incasina il tutto?
__________________
La prima necessità dell'uomo è il superfluo. Albert Einstein |
|
|
|
|
|
#4 | |
|
Member
Iscritto dal: Oct 2004
Città: goettingen
Messaggi: 275
|
Quote:
virtual void eval (real *values, const real *x) const virtual real eval (const real *x) const parent.cpp tuttavia definisce i metodi come: void Parent::eval(real* values, const real* x) const { // Try scalar function if not overloaded values[0] = eval(x); } real Parent::eval(const real* x) const { error("Missing eval() for user-defined function (must be overloaded)."); return 0.0; } potrebbe essere questo il problema? Il compilatore non dovrebbe vedere cmq i metodi come virtual e chiamare quelli di Child?
__________________
La prima necessità dell'uomo è il superfluo. Albert Einstein |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Oct 2004
Città: goettingen
Messaggi: 275
|
sono un cretino avevo ignorato la dichiarazione const scusate
__________________
La prima necessità dell'uomo è il superfluo. Albert Einstein |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:27.




















