Mail Archives: djgpp/1998/10/13/08:08:30
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 <iostream.h>
#include <strstream.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <allegro.h>
#include <strclass.h>
#include <map>
#include <vector>
#include <iterator>
#include <algo.h>
#include <function.h>
class Oggetto;
// typedef int COLORS;
typedef int FILL_PATTERNS;
typedef map<int,String,less<int> > TMString;
typedef vector<Oggetto> 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 :-)
- Raw text -