Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447

    [C++] Errore in compilazione

    Ho da poco iniziato a studiare le classi ed ho provato a scrivere questo programmino che gestisce con la classe point dei punti caratterizzati dalle cordinate x, y ed un nome.
    L'unico problema che riscontro è nella funzione distance dove vorrei calcolare la distanza tra due punti. Questo è un estratto del codice, dove per l'altro è riscontrato l'errore dal compilatore:
    codice:
    class point{
    	int x,y;
    	string name;
      public:	
    	point();
    	point(int, int);
    	void initWithValue();
    	void printPoint();
    	double distance(point par);
    };
    
    point::point(){
    	x=0;
    	y=0;
    	name="Untitled";
    }	
    
    point::point(int a, int b){
    	x=a;
    	y=b;
    	name="Untitled";
    }
    
    void point::initWithValue(){
    	int a, b;
    	string n;
    	
    	cout << "Inserisci il nome del punto: ";
    	getline(cin, n);
    	cout << "Inserisci il valore delle ascisse: ";
    	cin >> a;
    	cout << "Inserisci il valore delle ordinate: ";
    	cin >> b;
    	x=a;
    	y=b;
    	name=n;
    }
    
    void point::printPoint(){
    	cout << "Punto: " << name << endl
    		 << "x: " << x << endl
    		 << "y: " << y << endl;
    
    }
    
    double point::distance(point par){
    	if(x.par==x){
    		if(x.par>=x)
    			return(x.par-x);
    		else
    			return(x-x.par);
    		}
    	if(y.par==y){
    		if(y.par>=y){
    		    return(y.par-y);
    		}	
    		else
    			return(y-y.par);
    		}
    	else{
    		return(sqrt((x.par+x)*(x.par+x)+(y.par+y)*(y.par+y)));
    	}
    }
    L'errore è il seguente:
    codice:
    imac-di-Pacio:desktop pacio$ g++ program.cpp -o points
    program.cpp: In member function ‘double point::distance(point)’:
    program.cpp:56: error: request for member ‘par’ in ‘((point*)this)->point::x’, which is of non-class type ‘int’
    program.cpp:57: error: request for member ‘par’ in ‘((point*)this)->point::x’, which is of non-class type ‘int’
    program.cpp:59: error: request for member ‘par’ in ‘((point*)this)->point::x’, which is of non-class type ‘int’
    program.cpp:61: error: request for member ‘par’ in ‘((point*)this)->point::y’, which is of non-class type ‘int’
    program.cpp:62: error: request for member ‘par’ in ‘((point*)this)->point::y’, which is of non-class type ‘int’
    program.cpp:63: error: request for member ‘par’ in ‘((point*)this)->point::y’, which is of non-class type ‘int’
    program.cpp:66: error: request for member ‘par’ in ‘((point*)this)->point::y’, which is of non-class type ‘int’
    program.cpp:69: error: request for member ‘par’ in ‘((point*)this)->point::x’, which is of non-class type ‘int’
    program.cpp:69: error: request for member ‘par’ in ‘((point*)this)->point::x’, which is of non-class type ‘int’
    program.cpp:69: error: request for member ‘par’ in ‘((point*)this)->point::y’, which is of non-class type ‘int’
    program.cpp:69: error: request for member ‘par’ in ‘((point*)this)->point::y’, which is of non-class type ‘int’
    Grazie in anticipo dell'aiuto.

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

    x.par

    y.par


    ma

    par.x

    par.y
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Ho notato che se creo un main al cui interno dichiaro due variabili point(a cui applico rispettivamente initWithValue) quando dovrei inserire il nome della seconda non mi viene permesso perchè è come se non leggesse la seguente riga di codice:

    getline(cin, n);

    Sapete dirmi niente?

  4. #4
    Posta il codice del main.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Ecco il codice:
    codice:
    int main(){     
        point a,b;     
        a.initWithValue();     
        b.initWithValue();          
    
        system("pause");     
        return 0; 
    }

  6. #6
    Prima di cin.getline() inserisci un
    codice:
    cin.sync();
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Originariamente inviato da MItaly
    Prima di cin.getline() inserisci un
    codice:
    cin.sync();
    .
    Mi spiegeresti il perche?
    GRAZIE

  8. #8
    Perché le operazioni di input formattato (in sostanza, l'operatore >>) lasciano nel buffer dello stream il carattere di newline, per cui getline legge questo carattere "avanzato" dalla precedente operazione di lettura e smette di leggere (perché pensa che l'utente abbia già premuto Invio). Il metodo sync svuota il buffer di lettura, eliminando così questo carattere spurio.
    Amaro C++, il gusto pieno dell'undefined behavior.

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.