ABC sulle classi. Non ci riesco proprio.

Ho fatto un piccolo sketch per gestire 3 sensori e un lcd 20x4 e tutto funziona bene. Prima di provare anche l’RTC ho pensato di riordinare lo sketch separando tutto in classi…

Qui comincia il calvario, una miriade di errori che continuo a non capire da dove escono.

Ho cominciato a cancellare le parti di codice per vedere cosa genera l’errore e sono rimasto con nulla e ancora mi genera un errore:

#include "Arduino.h"
#include "Prova.h"

Prova::Prova(){
}

void Prova::s()
{
}

#ifndef Prova_h
#define Prova_h

#include "Arduino.h"

class Prova{
		public: 
		Prova();
		void s();
};
#endif

#include <Prova.h>

Prova prova();

void setup() {
  prova.s();
}

void loop() {
}

T-Grove.ino: In function ‘void setup()’:
T-Grove:6: error: request for member ‘s’ in ‘prova’, which is of non-class type ‘Prova()’
request for member ‘s’ in ‘prova’, which is of non-class type ‘Prova()’

Ho messo i file .ccp e .h in una cartella dentro libraries chiamata Prova (e se comunque non faccio dall’IDE aggiungi libreria non mi funziona)

Cosa manca? lo so che sicuramente è una cosa banale…

PS: dove sta il bottone per pubblicare codice?

Quasi tutto giusto, ma nel file .ino devi cambiare la definizione:

#include <Prova.h>
Prova prova();

in:

#include "Prova.h"
Prova prova;

L’istanza della classe Prova si chiama “prova”, per come l’hai scritta tu il compilatore la interpreta come prototipo di una funzione “prova()” senza parametri e che restituisce un oggetto di classe “Prova” (immagino tu abbia fatto confusione con il costruttore). Poi la include deve avere gli apici (ma penso sia solo un errore di trascrizione, altrimenti avresti per primo l’errore relativo alla Prova.h non trovata).

Comunque quando sviluppi una libreria fai prima a mettere i file .cpp e .h nella stessa cartella del .ino, così puoi aprirli direttamente nell’IDE e ricompilare per test. Alla fine quando funziona tutto, li sposti nella “/libraries”.

Ok grazie mille domani proverò. Mi potresti spiegare la differenza tra “” e <> nell’include?

Se metto i .cpp e .h insieme a .ino non mi trova i file… devo metterli nella cartella delle librerie e non basta scrivere #include, ma devo fare aggiungi libreria dal menu, altrimenti non va… sai perchè?

Grazie di nuovo.

Guida C - Il preprocessore C/#include

Il controllo delle librerie viene fatto solo all’avvio dell’IDE.
Se crei un nuova libreria devi riavviare. Una volta riavviato, controlla se appare nell’elenco.
La libreria può essere messa nella cartella libraries dell’installazione dell’IDE oppure nella sottocartella libraries di Documenti/Arduino/ (su windows)
Ricorda che la cartella che contiene la libreria deve avere lo stesso nome del file .h principale.
Quindi nella cartella “lamialibreria” ci sarà il file lamialibreia.h

Consiglio una buona guida di programmazione in C. :slight_smile:

PaoloP: --> http://www.science.unitn.it/~fiorella/guidac/guidac075.html

Il controllo delle librerie viene fatto solo all'avvio dell'IDE. Se crei un nuova libreria devi riavviare. Una volta riavviato, controlla se appare nell'elenco. La libreria può essere messa nella cartella libraries dell'installazione dell'IDE oppure nella sottocartella libraries di Documenti/Arduino/ (su windows) Ricorda che la cartella che contiene la libreria deve avere lo stesso nome del file .h principale. Quindi nella cartella "lamialibreria" ci sarà il file lamialibreia.h

Consiglio una buona guida di programmazione in C. :)

Ovviamente era gia nella cartella adeguata e la vedo nel menu dell'ide. ma se non la aggiungo da li non la trova quando compilo.

Il C è sensibile a maiuscole e minuscole. Sicuro che la libreria si chiama Prova.h con la P maiuscola?

Se rispondi al messaggio immediatamente precedente non c'è bisogno di quotare. :grin: