Roby94 (Member)
Guru
Messaggi: 1170
Iscritto: 28/12/2009
|
Salve. inline è uno dei tanti modificatori del CPP ed essendo uno dei piu "sfigati" la documentazione che lo riguardano è scarsa.
Vorrei sapere, avendo una classe base esiste un metodo per richiamare una funzione dichiarata come tale in una classe figlia?
Grazie.
|
|
lumo (Member)
Expert
Messaggi: 449
Iscritto: 18/04/2010
|
L'eredità dei metodi funziona allo stesso modo che ci sia inline o meno.
Se la tua domanda è
Codice sorgente - presumibilmente Plain Text |
Viene messo inlined? A seconda di cosa decide il compilatore, in genere sì.
Nel caso invece
Codice sorgente - presumibilmente C/C++ |
Base* b = new Figlia;
b->metodoInline();
|
Qua, dipende. In questo caso probabilmente sì, a meno che il compilatore non sia scemo. Ma se ad esempio ho un array di valori Base* e li passo a una funzione che chiama quel metodo, allora no (perché a priori non sai se siano tutti Figlia)
|
|
Roby94 (Member)
Guru
Messaggi: 1170
Iscritto: 28/12/2009
|
Faccio un esempio, premetto che compilo con GCC.
Ho una classe base che implementa il metodo A inline, dall'interno della classe questa si riesce a richiamare tranquillamente.
Da una classe figlio1 che eredita da base se cerco di richiamare A ricevo l'errore di mancata implementazione.
|
|
lumo (Member)
Expert
Messaggi: 449
Iscritto: 18/04/2010
|
Postato originariamente da Roby94:
Faccio un esempio, premetto che compilo con GCC.
Ho una classe base che implementa il metodo A inline, dall'interno della classe questa si riesce a richiamare tranquillamente.
Da una classe figlio1 che eredita da base se cerco di richiamare A ricevo l'errore di mancata implementazione. |
Devi fare in modo che il metodo A sia almeno protected |
|
Roby94 (Member)
Guru
Messaggi: 1170
Iscritto: 28/12/2009
|
è protected.
|
|
lumo (Member)
Expert
Messaggi: 449
Iscritto: 18/04/2010
|
Postato originariamente da Roby94:
è protected. |
|
|
Roby94 (Member)
Guru
Messaggi: 1170
Iscritto: 28/12/2009
|
Si, solamente l'implementazione del metodo inline viene eseguita in un file cpp a parte... In ogni caso non riesco piu a riprodurre l'errore, chiedo scusa ma non ho idea di quale fosse il problema in principio.
In ogni caso ti ringrazio lumo e mi scuso ancora.
|
|
Roby94 (Member)
Guru
Messaggi: 1170
Iscritto: 28/12/2009
|
Sono riuscito a ricreare l'errore in condizioni leggermente diverse, e mi sta facendo leggermente impazzire.
Libreria A
a.h
Codice sorgente - presumibilmente C/C++ |
namespace A {
void b();
}
|
a.cpp
Codice sorgente - presumibilmente C/C++ |
#include "a.h"
inline void A::b() {
[...]
}
|
Applicativo C
main.cpp
Codice sorgente - presumibilmente C/C++ |
#include "../a/a.h"
void main() {
A::b();
}
|
In questo caso l'errore mi viene generato nell'applicativo
Codice sorgente - presumibilmente C/C++ |
undefined reference to `A::b()'
|
In C questo stesso problema lo risolvo affiancando il marcatore extern al prototipo della funzione inline, e cosi risolvo.
Sapreste aiutarmi? Sono un po' bloccato, le ho provate quasi tutte. Ultima modifica effettuata da Roby94 il 20/11/2015 alle 21:52 |
|
lumo (Member)
Expert
Messaggi: 449
Iscritto: 18/04/2010
|
sì, è un errore di semantica, cambia così a.cpp
Codice sorgente - presumibilmente C++ |
#include "a.h" namespace A { inline void b() { .. } }
|
|
|