Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    60

    [c++]errori nella compilazione

    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???

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: [c++]errori nella compilazione

    Questa

    istream & operator>>(istream &input,Array &a)

    deve essere

    istream & operator>>(istream &input,const Array &a)

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    60
    fatto...ma mi da sempre questi 4 errori

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    No ... non li da' ...

    Controlla bene ...

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    60
    probabilmente sto facendo una grande confusione...ma continua a darmi i soliti errori;
    per sicurezza cmq riposto il sorgente modificato come mi hai detto


    //Array100.h
    #ifndef ARRAY100_H
    #define ARRAY100_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






    //Array100.cpp
    #include <iostream>
    #include <iomanip>
    #include <cstdlib>//prototipo della funzione exit
    using namespace std;
    #include "Array100.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,const Array &a){
    for(int i=0;i<a.size;i++)
    {
    input>>a.ptr[i];
    }
    return input;//abilita le chiamate in cascata
    }

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Nessun problema (ho provato con VS 2003).

    (Perche' adesso hai i file Array100.h e Array100.cpp al posto di Array.h e Array.cpp ... ? Probabilmente stai facendo un po' di confusione ...)

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    60
    gli ho cambiato nome io....bo ora provo a compilarlo con dev c++...
    cmq grazie

  8. #8
    Ho compilato Array100.cpp (aggiungendo a fine file
    Codice PHP:
    int main (){
        Array 
    aArray;
        return 
    0;

    per superare il linking) con g++ -Wall versione "i686-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5367)" :

    Nessun errore, nessun warning, anche eseguendolo (ok la main è molto semplice) nessun errore.

    EDIT:
    attento che in:
    Codice PHP:
    const Array &Array::operator=(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

    quando fai delete [] ptr, poi non lo riallochi.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.