| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  26-03-2008, 11:41 | #1 | 
| Senior Member Iscritto dal: Aug 2005 Città: Genova 
					Messaggi: 2285
				 | 
				
				[C++] Problema con array di oggetti
			 
		############################################################### PROBLEMA LINKER RISOLTO (VEDI PIU' GIU' PER IL PROBLEMA SCRITTO NEL TITOLO ) ################################################################# Raga avrei bisogno di aiuto: quando vado a compilare il seguente codice Codice: #include "allegro.h"
// ----------------------------- dichiarazione variabili ------------------------------
BITMAP *buf,*sprite;		
PALETTE colori;	// in colori andrà inserito il valore della profondità di colore
int w,h;
//--------------------------------------------------------------------------------------
class Video{	//contiene tutti i metodi per la rappresentaz a video
public:
	Video();
	~Video(){destroy_bitmap(buf);}
	/// w=wide, h=height dimensioni finestra
	void InitDisplay(int disp,int w, int h){	/*inizializza la parte grafica
												ATTENZIONE: w e h 	devono essere dichiarate
												come variabili globali*/
		set_color_depth(disp);
		set_palette(colori);
		set_gfx_mode(GFX_AUTODETECT_WINDOWED, w, h, 0, 0); 
		buf = create_bitmap(w, h);
		clear(buf);
	}
	void DB(int w,int h){	//doppio buffer
		vsync();	
		blit(buf, screen, 0, 0, 0, 0, w, h);
		clear(buf);
	}
};
class Sprite{
	int x,y;
public:
	Sprite(int setx,int sety){sprite = load_bmp("pacstop.bmp",colori);x=setx; y=sety;}
	~Sprite(){destroy_bitmap(sprite);}
	int Getx(){return x;}
	int Gety(){return y;}
	void Mostra(){draw_sprite(buf,sprite,Getx(),Gety());}
	void Move(){
		if (key[KEY_UP]){y-=1;if(y<=0)y=0;}
		if (key[KEY_DOWN]){y+=1;if(y>=h)y=h;}
		if (key[KEY_LEFT]){x-=1;if(x<=0)x=0;}
		if (key[KEY_LEFT]){x+=1;if(x>=w)x=w;}
	}	
};
//
//
//------------------------------------------------------------
//INIZIO PROGRAMMA MAIN
void main(){
	allegro_init();	
	install_keyboard();
	//--------------------- SPAZIO PER ISTANZIARE GLI OGGETTI ---------------------
	Video MainGame;	//inizializzo un oggetto di tipo Video chiamo MainGame
	Sprite Player(200,200);	//istanzio un oggetto tipo Sprite nella posiz 200,200
	//-----------------------------------------------------------------------------
	//
	//----------------- EVENTUALE INIZIALIZZAZ VARIABILI --------------------
	w=640;h=480;
	//ho impostato le dimensioni della finestra
	//-----------------------------------------------------------------------
	MainGame.InitDisplay(32,w,h);
		
		
	//------------------------- CARICA IMG E SPRITE -------------------------
	// forse superfluo xkè si fa con i metodi di classe
	//-----------------------------------------------------------------------
	//------------------------- INIZIO CICLO WHILE CHE SI RIPETE------------------------
	while (!key[KEY_ESC]) {
		MainGame.DB(w,h);	/* inserisco qui la procedutra creata precedentemente per la 
							visualizzazione	schermo 'doppiobuffering();' */
		Player.Move();
		Player.Mostra();
		
	}
	//---------------------------------------------------------------------------
	// DISTRUZIONE DI TUTTE LE IMG PRESENTI IN MEMORIA
	Player.~Sprite();
	MainGame.~Video();
	//--------------------------------------------------------------------------
}END_OF_MAIN();Codice: Error 1 error LNK2019: unresolved external symbol "public: __thiscall Video::Video(void)" (??0Video@@QAE@XZ) referenced in function "void __cdecl _mangled_main(void)" (?_mangled_main@@YAXXZ) prova object oriented.obj  . Un'altra cosa, così la prox volta magari riesco a capire: come va interpretato il messaggio sopra del linker? Cioè gli manca qualcosa? Grazie a tutti   
				__________________ Lego ™ Fans Club Ultima modifica di Dani88 : 27-03-2008 alle 18:35. | 
|   |   | 
|  26-03-2008, 11:51 | #2 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | 
		Dove lo implementi il costruttore di default ?
		 | 
|   |   | 
|  26-03-2008, 13:32 | #3 | 
| Senior Member Iscritto dal: Aug 2005 Città: Genova 
					Messaggi: 2285
				 | 
		è vero cavoli   manca {}  (non deve fare nulla per ora... Grazie mille   
				__________________ Lego ™ Fans Club | 
|   |   | 
|  26-03-2008, 14:29 | #4 | 
| Senior Member Iscritto dal: Aug 2005 Città: Genova 
					Messaggi: 2285
				 | 
		già che ci sono un'altra cosa: se lascio i 2 distruttori in fondo, quando premo ESC mi esce la finestra che dice che si è verificato un errore se voglio debuggare con VS 2005, se invece gli dico di ignorarli usando // il programma si chiude tranquillamente. Non riesco a capire il motivo...i distruttori devo chiamarli io giusto? Non fanno da soli...
		 
				__________________ Lego ™ Fans Club | 
|   |   | 
|  26-03-2008, 14:37 | #5 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | 
		No, vengono chiamati da soli sugli oggetti allocati staticamente. Sugli oggetti allocati con new vengono chiamati quando fai la delete.
		 | 
|   |   | 
|  26-03-2008, 16:45 | #6 | 
| Senior Member Iscritto dal: Aug 2005 Città: Genova 
					Messaggi: 2285
				 | 
		ah ok, infatti mi ricordavo una cosa di questo tipo ma siccome VS me li dava tra i metodi della classe mi è venuto il dubbio che li dovessi chiamare io. Altra piccola curiosità/dubbio (scusa se ne approfitto  ma siccome abbiamo iniziato le classi da poco all'uni a volte ho qualche dubbio) Se io creo una classe pippo così: Codice: class pippo{
        int x,y;  //settate col costruttore a 0
public:
//metodi vari
};pippo obj1; pippo obj2; Ognuno dei 2 oggetti ha una sua x e una sua y? cioè se modifico x=2 e y=4 di obj2, quelle di obj1 rimangono a 0 giusto? 
				__________________ Lego ™ Fans Club | 
|   |   | 
|  26-03-2008, 16:50 | #7 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | 
		Tutto giusto. Sono due istanze diverse. Al contrario se usi la parola static hai una sola istanza del membro per tutte le istanze di quella classe.
		 | 
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 12:17.









 
		 
		 
		 
		







 
  
 



 
                        
                        










