Message-Id: <3.0.2.32.19981013140619.0077545c@tex.odd.it> X-Sender: delfo AT tex DOT odd DOT it X-Mailer: QUALCOMM Windows Eudora Pro Version 3.0.2 (32) Date: Tue, 13 Oct 1998 14:06:19 +0200 To: djgpp AT delorie DOT com From: Stefano Del Furia Subject: Error: Abort ! during compiling when using vector(n) and Optimization Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Reply-To: djgpp AT delorie DOT com Dear Users, i have tried to compile this little program: ///////////////////////// /* Programma per il disegno di forma grafiche Ver. 1.0 Orientato agli oggetti Ver. 2.0 Aggiunta gestione colori Ver. 2.1 Aggiunta gestione riempimenti e ed oggetti statici Ver. 2.2 Aggiunta numerazione progressiva oggetti Ver. 2.3 Aggiunta funzioni per ALLEGRO Ver. 2.4 Aggiunta STRINGHE e VECTOR Ver. 2.5 Aggiunta MAP e rimosso VECTOR + funzione ridisegna Ver. 2.6 Aggiunta Rimozione oggetti tramite iteratore Ver. 2.7 Stefano Del Furia 23 Settembre 1998 */ #include #include #include #include #include #include #include #include #include #include #include #include class Oggetto; // typedef int COLORS; typedef int FILL_PATTERNS; typedef map > TMString; typedef vector TVOggetto; const MAX_AZI=11; const MAX_PARAM=5; const ESCI=0; const RETT=1; const QUAD=2; const CERC=3; const PUNT=4; const LINE=5; const COLO=6; const TRIE=7; const CRIE=8; const RIDI=9; const CANC=10; TMString strAzioni; int iParam[MAX_AZI]; int VParam_Input[MAX_PARAM]; class Oggetto { private: long int lCodiceOggetto; int iTipoOggetto; int iXinf; int iYinf; int iXsup; int iYsup; COLORS iColoreLinea; COLORS iColoreRiemp; FILL_PATTERNS iTipoRiemp; static long int lSNumProgreOgg; public: static COLORS SColoreLinea; static COLORS SColoreRiemp; static FILL_PATTERNS STipoRiemp; public: Oggetto(); Oggetto(int iTo, int iXinf, int iYinf, int iXsup=0, int iYsup=0); Oggetto(const Oggetto & OgCopia); Oggetto & operator=(const Oggetto & OgCopia); ~Oggetto(); void OgDisegna(); void SetColoreLinea(COLORS lc); void SetColoreRiemp(COLORS fc = WHITE); void SetTipoRiemp(FILL_PATTERNS fp = DRAW_MODE_SOLID); long int GetCodiceOggetto(); void StampaInfoOggetto(int c=10, int r=10); }; Oggetto::Oggetto() { lSNumProgreOgg++; lCodiceOggetto=lSNumProgreOgg; iTipoOggetto=ESCI; iXinf=0; iYinf=0; iXsup=0; iYsup=0; iColoreLinea=SColoreLinea; iColoreRiemp=SColoreRiemp; iTipoRiemp=STipoRiemp; }; Oggetto::Oggetto(int iTo,int iXcinf, int iYcinf, int iXcsup, int iYcsup) { lSNumProgreOgg++; lCodiceOggetto=lSNumProgreOgg; iTipoOggetto=iTo; iXinf=iXcinf; iYinf=iYcinf; iXsup=iXcsup; iYsup=iYcsup; iColoreLinea=SColoreLinea; iColoreRiemp=SColoreRiemp; iTipoRiemp=STipoRiemp; }; Oggetto::Oggetto(const Oggetto & OgCopia) { /* // VEcchia versione con incremento del contatore lSNumProgreOgg++; lCodiceOggetto=lSNumProgreOgg; */ lCodiceOggetto=OgCopia.lCodiceOggetto; iTipoOggetto=OgCopia.iTipoOggetto; iXinf=OgCopia.iXinf; iYinf=OgCopia.iYinf; iXsup=OgCopia.iXsup; iYsup=OgCopia.iYsup; iColoreLinea=OgCopia.iColoreLinea; iColoreRiemp=OgCopia.iColoreRiemp; iTipoRiemp=OgCopia.iTipoRiemp; }; Oggetto& Oggetto::operator=(const Oggetto & OgCopia) { if (this!=&OgCopia) { /* // VEcchia versione con incremento del contatore lSNumProgreOgg++; lCodiceOggetto=lSNumProgreOgg; */ lCodiceOggetto=OgCopia.lCodiceOggetto; iTipoOggetto=OgCopia.iTipoOggetto; iXinf=OgCopia.iXinf; iYinf=OgCopia.iYinf; iXsup=OgCopia.iXsup; iYsup=OgCopia.iYsup; iColoreLinea=OgCopia.iColoreLinea; iColoreRiemp=OgCopia.iColoreRiemp; iTipoRiemp=OgCopia.iTipoRiemp; } return *this; }; Oggetto::~Oggetto() { }; void Oggetto::OgDisegna() { /* setcolor(iColoreLinea); setfillstyle(iTipoRiemp,iColoreRiemp); */ switch (iTipoOggetto) { case ESCI : break; case RETT : rect (screen,iXinf,iYinf,iXsup,iYsup,iColoreLinea); break; case QUAD : rect (screen,iXinf,iYinf,iXinf+iXsup,iYinf+iXsup,iColoreLinea); break; case CERC : circle (screen,iXinf,iYinf,iXsup,iColoreLinea); break; case PUNT : putpixel (screen,iXinf,iXsup,iColoreLinea); break; case LINE : line (screen,iXinf, iYinf, iXsup, iYsup,iColoreLinea); break; default: break; } }; void Oggetto::SetColoreLinea(COLORS lc) { iColoreLinea=lc; }; void Oggetto::SetColoreRiemp(COLORS fc) { iColoreRiemp=fc; if (iColoreRiemp>bitmap_color_depth(screen)) iColoreRiemp=WHITE; }; void Oggetto::SetTipoRiemp(FILL_PATTERNS fp) { iTipoRiemp=fp; }; long int Oggetto::GetCodiceOggetto() { return lCodiceOggetto; }; void Oggetto::StampaInfoOggetto(int c,int r) { char tmp[80]; sprintf(tmp,"Codice %ld ",lCodiceOggetto); textout(screen, font, tmp ,c*8,r*20,WHITE); sprintf(tmp,"%d %d %d %d %d ",iTipoOggetto,iXinf,iYinf,iXsup,iYsup); textout(screen, font, tmp ,c*8,r*20+10,WHITE); }; COLORS Oggetto::SColoreLinea=WHITE; COLORS Oggetto::SColoreRiemp=WHITE; FILL_PATTERNS Oggetto::STipoRiemp=DRAW_MODE_SOLID; long int Oggetto::lSNumProgreOgg=0; int iCreaOggetto(TVOggetto &, int, int []); int iComando(int []); void vCaricaParametriGlobali(TMString & , int []); void Azione(int , int [MAX_PARAM], TVOggetto &); void Ridisegna(TVOggetto & ); int i; int GFX_Error; int iUscita; TVOggetto VOggetti(10); main() { return 0; } ///////////////////// if i lunch gxx -g -O -c pro.cpp -o pro1.o if i write the line below,i obtain an Abort ! error: TVOggetto VOggetti(10); but if i write TVOggetto VOggetti; all seems to work the only way to compile TVOggetto VOggetti(10); is executing another level of optimization: gxx -g -O2 -c pro.cpp -o pro1.o but in this way i'm unable to make step-debugging. i have the same behaviour if i write in the main program: VOggetti.resize(10); There a solution? TIA >>mailed by ''~`` Stefano Del Furia ( o o ) __________________________________.oooO--(_)--Oooo._ | ___/ / _/__ www.geocities.com/SiliconValley/3546/ | |/ _ / _(_-< Computer Science Department | |\_,_/_//___/ delfo AT tech-center DOT com .oooO | |ITIS "E.FERMI" Bibbiena 52010 AR IT ( ) Oooo. | |_____________________________________\ (____( )___| THEORY is when you know everything \_) ) / but nothing works. (_/ PRACTICE is when everything works but you don't know why. Our aim is to join THEORY and PRACTICE: (-: NOTHING works and we don't know WHY :-)