Salve,
sto modificando un progetto fatto da un'altra persona per adattarlo alle mie esigenze (tra le quali anche il cambio di scheda da Arduino UNO a Fishino Mega) ed ho dovuto effettuare una modifica alla libreria iostream.h commentandone una sezione:
/** insert endline
* \param[in] os The Stream
* \return The stream
*/
/*
inline ostream& endl(ostream& os) {
os.put('\n');
#if ENDL_CALLS_FLUSH
os.flush();
#endif // ENDL_CALLS_FLUSH
return os;
}
*/
Perchè andava in conflitto con un header del mio programma (FlashMini.h):
In fase di compilazione veniva fuori un errore di doppia definizione di endl.
Ora, io ho cercato sul forum e veniva detto di commentare la sezione del file iostream.h come ho fatto, però io mi chiedo se sia il modo migliore di procedere. Se poi un altro sketch ha bisogno di quella libreria intatta come faccio? Esiste un modo migliore per risolvere questo tipo di inconvenienti? Oltretutto la libreria iostream.h nel mio caso veniva richiamata da altre librerie (FatLib.h).
Potresti essere più specifico?
Magari non ho capito io la risposta oppure non ho esposto chiaramente il problema:
il conflitto non riguarda il nome della mia libreria, ma la definizione dell'enumeratore endl all'interno della libreria stessa...
se modifichi la libreria poi con gli altri programmi che scriverai non funzionerà più
Per cui è meglio se fai una copia di questa libreria, la modifichi e gli dai un nuovo nome, che poi includerai nel programma al posto di quello originale, così "crei" una libreria specifica per l'occasione senza invalidarne il funzionamento generale
In verità non ha senso che sia definita altrove, il posto giusto di quella definizione è iostream.h. Io aprirei un issue all'altra libreria per farlo togliere o almeno mettere sotto un #ifndef.
SukkoPera:
In verità non ha senso che sia definita altrove, il posto giusto di quella definizione è iostream.h. Io aprirei un issue all'altra libreria per farlo togliere o almeno mettere sotto un #ifndef.
Ecco! L'altra libreria l'ha scritta chi ha scritto lo sketch che sto adattando. Quello che non ho capito è se posso togliere dal mio sketch quelle righe dato che sono definite già in iostream.h (il cui riferimento l'ho aggiunto io con delle modifiche che ho apportato) oppure fanno cose diverse. Non ho la comprensione di cosa fa esattamente il codice:
Da quello che ho capito io, ma potrei benissimo sbagliarmi data la mia scarsissima esperienza in materia, il creatore dello sketch originale ha creato una sua libreria FlashMini.h per non includere la libreria standard Flash.h magari per risparmiare spazio nella ROM di Arduino, può essere?
Io poi ho modificato il suo sketch aggiungendo la libreria FishinoSdFat.h / FatLib.h che a sua volta richiama la iostream.h e da li ho avuto l'errore di doppia definizione (prima di questa modifica funzionava tutto correttamente).
Potrebbe anche essere che ora non abbia più senso includere una mini libreria personalizzata anche perchè sto utilizzando un MEGA e non ho problemi di spazio in ROM.
Provando comunque a togliere la mini libreria dagli include ho degli errori e lo sketch non compila quindi credo che i codici non siano perfettamente equivalenti...