Strano errore
Ciao a tutti,non riesco più che a capire l'errore,il motivo dello stesso..
Spero che qualcuno sia in grado di risolverlo..
Il codice
compito.cpp
compito.h
main.cpp
Immagine dell'errore..
Grz!!
Spero che qualcuno sia in grado di risolverlo..
Il codice
compito.cpp
#include"compito.h" int Vivaio::contapos(int n){ int k=n+1; k*=2; return k; } Vivaio::Vivaio(int n=3){ n=(n<=0)?3:n; int k; file=n; matt=new stato*[n]; for(int i=0;i<n;i++) matt[i]=new stato[contapos(i)]; for(int i=0;i<file;i++){ int k=contapos(i); for(int j=0;j<k;j++){ matt[i][j]=LIBERO;}} } Vivaio::~Vivaio(){ for(int i=0;i<file;i++){ for(int j=0;j<i;j++){ delete []matt[j]; delete []matt; }} } ostream& operator<<(ostream& os,const Vivaio& v){ os<<"STAMPA VIVAIO"<<endl; os<<v.file<<endl; int pos=0;//calcolo posizione for(int i=0;i<v.file;i++){ pos=v.contapos(i); for(int j=0;j<pos;j++){ if(v.matt[i][j]==LIBERO)os<<"L"; else{ os<<"O";} } os<<endl;} return os; }
compito.h
#include<iostream> using namespace std; enum stato{LIBERO,OCCUPATO}; class Vivaio{ int file;//numero file int totpos;//totale posti stato** matt; public: Vivaio(int); int contapos(int); ~Vivaio(); friend ostream& operator<<(ostream&,const Vivaio&); };
main.cpp
#include"compito.h" int main(){ Vivaio v(5); cout<<v; system("PAUSE"); return 0; }
Immagine dell'errore..
Grz!!
Risposte
Il problema è che non è possibile richiamare funzioni membro non costanti (per i quali si è assicurato che non vanno a modificare lo stato della classe) a partire da istanze costanti di una classe. Nel tuo caso, v è una istanza costante e quindi non può essere modificata all'interno del codice. La soluzione è aggiungere un const tra la parentesi di chiusura e la parentesi graffa di apertura del corpo della funzione. Così (devi aggiungerlo anche al prototipo della funzione nella classe):
int Vivaio::contapos(int n) const { int k=n+1; k*=2; return k; }
Ottimo,grazie per la spiegazione cosi completa..
