salve
compilando questo codice preso da un libro con visual c++mi da una serie
di errori.
Il codice è il seguente:
Array.h
#ifndef ARRAY_H
#define ARRAY_H
#include <iostream>
using namespace std;
class Array
{
friend ostream &operator<<(ostream &,const Array &);
friend istream &operator>>(istream &,const Array &);
public:
Array(int=10);//costruttore di default
Array(const Array &);//costruttore di copia
~Array();//distruttore
int getSize() const;
const Array &operator=(const Array&);//operatore di assegnamento
bool operator==(const Array&) const;//operatore di eguaglianza
//operatore di disuguaglianza
bool operator!=(const Array &right){
return !((*this)==right);
}
//operatore di indicizzazzione per oggetti non costanti
int &operator[](int);
//operatore di indicizzazzione per oggetti costanti
int &operator[](int)const;
private:
int size;
int *ptr;//puntatore al primo elemento dell'array
};//fine della classe array
#endif
Array.cpp
#include <iostream>
#include <iomanip>
#include <cstdlib>//prototipo della funzione exit
using namespace std;
#include "Array.h"
//implementazione delle funzioni della classe array
//costruttore
Array::Array(int arraySize){
size=((arraySize>0)?arraySize:10);
ptr=new int[size];
for(int i=0;i<size;i++){
ptr[i]=0;
}
}//fine del costruttore
//costruttore di copia
Array::Array(const Array &arrayToCopy){
size=arrayToCopy.getSize();
ptr=new int[size];
for(int i=0;i<size;i++){
ptr[i]=arrayToCopy.ptr[i];
}
}//fine del costruttore di copia
//distruttore
Array::~Array(){
delete[] ptr;
}//fine del distruttore
//funzione che restituisce il numero di elementi del vettore
int Array::getSize()const{
return size;
}//fine della funzione getsize
//ridefinizione dell'operatore di assegnamento ;la restituzione di uoggeto const
//impedisce assegnamenti(a1=a2)=a3
const Array &Array:perator=(const Array &right){
if(&right!=this){
if(right.size!=(*this).size){
delete[] ptr;
(*this).size=right.size;
}
for(int i=0;i<size;i++){
(*this).ptr[i]=right.ptr[i];
}
}
return *this;//abilita le chiamater in cascata
}
//ridefinizione dell'operatore di eguaglianza
bool Array:perator==(const Array &right) const{
if(right.size!=((*this).size))
return false;
for(int i=0;i<size;i++){
if(((*this).ptr[i])!=right.ptr[i])
return false;
}
return true;
}
//fine della funzione operatore di eguaglianza
//implementazione della funzione che ridefinsce l'operatore
//di indicizzazzione per oggetti non costanti
int & Array:perator[](int subscript)
{
if((subscript>10) ||(subscript<=0)){
cerr<<"\nError: Subsript "<<subscript<<" is out of range."<<endl;
exit(1);
}
return ((*this).ptr[subscript]);
}
//fine della fuzione indicizzazzione per oggetti non costanti
//funzione che definisce l'operatore di iindicizzazzione per oggetti costanti
int & Array:perator[](int subscript) const{
if ((subscript>10) ||(subscript<=10)){
cerr<<"\nError: Subscript "<<subscript<<" is out of range."<<endl;
exit(1);
}
return(ptr[subscript]);
}
//fine della funzione che definisce l'operatore di indicizzazzione
//per ogeeti costanti
ostream & operator<<(ostream& output,const Array &a){
for(int i=0;i<a.size;i++)
{
output<<setw(2)<<a.ptr[i];
if((i%4)==0)
output<<endl;
}
return output;//abilita le chiamate in cascata
}
istream & operator>>(istream &input,Array &a){
for(int i=0;i<a.size;i++)
{
input>>a.ptr[i];
}
return input;//abilita le chiamate in cascata
}
Gli errori sono i seguenti:
--------------------Configuration: Array - Win32 Debug--------------------
Compiling...
Array.cpp
C:\Documents and Settings\edo1.EDO\Desktop\informatica\Array.cpp(93 ) : error C2248: 'size' : cannot access private member declared in class 'Array'
c:\documents and settings\edo1.edo\desktop\informatica\array.h(29) : see declaration of 'size'
C:\Documents and Settings\edo1.EDO\Desktop\informatica\Array.cpp(95 ) : error C2248: 'ptr' : cannot access private member declared in class 'Array'
c:\documents and settings\edo1.edo\desktop\informatica\array.h(30) : see declaration of 'ptr'
C:\Documents and Settings\edo1.EDO\Desktop\informatica\Array.cpp(10 3) : error C2248: 'size' : cannot access private member declared in class 'Array'
c:\documents and settings\edo1.edo\desktop\informatica\array.h(29) : see declaration of 'size'
C:\Documents and Settings\edo1.EDO\Desktop\informatica\Array.cpp(10 5) : error C2248: 'ptr' : cannot access private member declared in class 'Array'
c:\documents and settings\edo1.edo\desktop\informatica\array.h(30) : see declaration of 'ptr'
Error executing cl.exe.
Array.obj - 4 error(s), 0 warning(s)
come posso risolvere???