Strano errore

Gianni911
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
#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
apatriarca
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;
                            }

Gianni911
Ottimo,grazie per la spiegazione cosi completa.. :D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.