begin process at 2012 05 30 05:30:07
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

Probleme de valeur dans mes class!


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Probleme de valeur dans mes class!

vendredi 20 octobre 2006 à 10:13:48 | Probleme de valeur dans mes class!

jojomillenium

Bonjour,

Je programme sous VS6 et j'ai un probleme que j en arrive pas a resoudre depuis 2 jours, alors apres 2 presque nuit blanche et de tout petits yeux me voila devant vous en esperant trouver l'origine de mon soucis!
Je vous explique, le code suit en dessous:
J'ai plusieur objet d'une meme class, je lis des valeur dans un fichier et selon ce qu'il lis sur une ligne, il enregistre les valeur dans tel ou tel objet... ce sont des coordonnées et les differents objet sont des couches (etages). Je créer un objet par etage car chaque etage a sa hauteur et couleur approprié!
Et a la fin il dessine chaque objets, mon but et de pouvoir dans le futur decider de dessiner la couche que je veux grace au menu de mon programme!
Mon probleme ne se trouve pas dans la compilation, aucune erreur de ce cote la, mon programme s'execute parfaitement, je clique sur ouvrir, je selectionne mon fichier et ensuite il me dessine n'importe quoi!!! par contre (cf en dessous) si dans mon switch(LTest) je ne laisse qu'un seul et unique case, il me le dessine exactement comme il faut, mais des que je met tous les case, la il me dessine n importe quoi!
J'ai fait un test en ecrivant dans un fichier les valeur recu par AddValue() et en ecrivant les valeurs tout a la fin, une fois tout le fichier lu qu'elles sont les valeurs dans mes objets... AddValues recoit les bonne valeurs, mais apres mes objets ont des valeurs totalement fausse et abhérentes genre négative par exemple... enfin bref des valeur rien a voir!
Avec le debug j'ai verifié les valeur qui s'enregistrait pourtant dans mes objets et ca a l air correcte! Je ne comprend vraiment pas ce qu'il se passe! Merci infiniment pour votre aide!

Voila, maintenant le Code
Je declare dans un General.h

#define INDICE_NELL    0
#define INDICE_PPLUS    1
#define INDICE_ACTIVE    2
#define INDICE_POLY        3
#define INDICE_ETAL1    4
#define INDICE_CONT        5
#define INDICE_ETAL2    6
#define INDICE_VIA1        7

// COORDONNEES
class VERTEX                            // Build our Vertex Class
{
public:
    float x, y;                            // 3D coordinates x, y       
};
// CLASS GROUPANT LES 4 SOMMETS DE LA FACE
class QUAD                                // Build our Quads Structure
{
public:
    VERTEX vertex[4];                    // Array of 4 vertices                           
};                                   
// CLASS D'UN COUCHE
class LAYER                                // Build our LAYER Class
{
public:
    int num_quads;                       
    float hauteur, zstart;
    vec4 color;
    QUAD* quad;

    LAYER(float z, float h, float r, float g, float b, float a)
    {
        this->num_quads=0;
        this->zstart = z;
        this->hauteur = h;
        this->quad = new QUAD;
        this->color.set(r, g, b, a);
    }

    void AddValue(float _centrex, float _centrey, float _qwidth, float _qlenght)
    {
        this->quad[num_quads].vertex[0].x =
_centrex - (_qlenght/2);
        this->quad[num_quads].vertex[0].y =
_centrey + (_qwidth/2);

        this->quad[num_quads].vertex[1].x = 
_centrex + (_qlenght/2);
        this->quad[num_quads].vertex[1].y =
_centrey + (_qwidth/2);

        this->quad[num_quads].vertex[2].x =
_centrex + (_qlenght/2);
        this->quad[num_quads].vertex[2].y = _centrey - (_qwidth/2);
                   
        this->quad[num_quads].vertex[3].x =
_centrex - (_qlenght/2);
        this->quad[num_quads].vertex[3].y =
_centrey - (_qwidth/2);

        this->num_quads= this->num_quads+1;
    }
    ~LAYER()
    {delete quad; }
};
extern LAYER LNell;
extern LAYER LPPlus;
extern LAYER LActive;
extern LAYER LPoly;
extern LAYER LEtal1;
extern LAYER LEtal2;
extern LAYER LCont;
extern LAYER LVia1;

MonGeneral.cpp
LAYER LNell    = LAYER(  0.0,-35.0, 1.0, 1.0, 1.0, 0.5);
LAYER LPPlus    = LAYER(  0.0,  0.0, 1.0, 1.0, 1.0, 1.0);
LAYER LActive    = LAYER(  0.0, -4.0, 0.0, 1.0, 0.0, 1.0);
LAYER LPoly        = LAYER(  0.1,  4.2, 1.0, 0.0, 0.0, 1.0);
LAYER LCont        = LAYER(  0.0, 10.0, 0.0, 0.0, 0.0, 1.0);
LAYER LEtal1    = LAYER( 10.0,  6.0, 0.0, 0.0, 1.0, 1.0);
LAYER LEtal2    = LAYER( 26.0, 10.0, 0.0, 0.0, 1.0, 1.0);
LAYER LVia1        = LAYER( 16.0, 10.0, 0.0, 0.0, 0.0, 1.0);

Ma fonction de lecture du fichier et d'enregistrement
bool SetupWorld(const char *filename)
{
    char type_layer[10];
    CString TestTypeLayer;
    float centrex, centrey, qwidth, qlenght;
    FILE *filein;
    char chaine[255];
    int LTest=-1;
    filein = fopen(filename, "rt");                // File To Load World Data From
    if(filein != NULL)
    {               
        while (fgets(chaine, 250, filein) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
        {
            if(CString(1,chaine)=="L")
            {
                sscanf(chaine, "L %s;", &type_layer);
                TestTypeLayer = CString(type_layer);
                if(TestTypeLayer.Compare("PPLUS;"))
                {   
                    LTest = INDICE_PPLUS;
                }
                if(TestTypeLayer.Compare("ACTIVE;"))
                {   
                    LTest = INDICE_ACTIVE;
                }
                if(TestTypeLayer.Compare("POLY;"))
                {   
                    LTest = INDICE_POLY;
                }
                if(TestTypeLayer.Compare("ETAL1;"))
                {   
                    LTest = INDICE_ETAL1;
                }
                if(TestTypeLayer.Compare("ETAL2;"))
                {   
                    LTest = INDICE_ETAL2;
                }
                if(TestTypeLayer.Compare("VIA1;"))
                {   
                    LTest = INDICE_VIA1;
                }
                if(TestTypeLayer.Compare("NELL;"))
                {   
                    LTest = INDICE_NELL;
                }

                if(TestTypeLayer.Compare("CONT;"))
                {   
                    LTest = INDICE_CONT;
                }
            }

            if(CString(1,chaine)=="B")
            {
                sscanf(chaine, "B %f %f %f,%f ;", &qlenght, &qwidth, &centrex, &centrey);
                switch (LTest)
                {
                    case INDICE_CONT    : LCont.AddValue(centrex,centrey,qwidth,qlenght);    break;
                    case INDICE_NELL    : LNell.AddValue(centrex,centrey,qwidth,qlenght);    break;
                    case INDICE_ETAL1    : LEtal1.AddValue(centrex,centrey,qwidth,qlenght); break;
                    case INDICE_ETAL2  : LEtal2.AddValue(centrex,centrey,qwidth,qlenght); break;
                    case INDICE_VIA1    : LVia1.AddValue(centrex,centrey,qwidth,qlenght);    break;
                    case INDICE_ACTIVE  : LActive.AddValue(centrex,centrey,qwidth,qlenght); break;
                    case INDICE_POLY    : LPoly.AddValue(centrex,centrey,qwidth,qlenght);    break;
                    case INDICE_PPLUS   : LPPlus.AddValue(centrex,centrey,qwidth,qlenght);    break;   
                }
            }
        }
    }
    fclose(filein);
    return 1;
}


Et pour finir le fichier lu ressemble a ca: Je precise que je ne peux pas changer la facon dont est construit ce fichier, il est exporté d'un autre programme.
DS 1 5 1;
L PPLUS;
L ACTIVE;
B 12 46 38,315;
L ACTIVE;
L POLY;
B 36 10 38,315;
L ETAL1;
L CONT;
L ETAL2;
L VIA1;
L NELL;
DF;
DS 2 5 1;
L PPLUS;
L ACTIVE;
B 12 46 38,251;
L ACTIVE;
L POLY;
B 36 10 38,251;
L ETAL1;
L CONT;
L ETAL2;
L VIA1;
L NELL;
DF;
DS 3 5 1;
L PPLUS;
L ACTIVE;
B 12 46 108,243;
L ACTIVE;
L POLY;
B 36 10 108,243;
L ETAL1;
L CONT;
L ETAL2;
L VIA1;
L NELL;
DF;

Voila, je crois que je vous ai tout dis!
Encore un GRAND merci d'avance a ceux qui m'aideront a trouver pourquoi ca ne fonctionne pas comme il faudrait!

Jojo

vendredi 20 octobre 2006 à 12:52:01 | Re : Probleme de valeur dans mes class!

jojomillenium

Réponse acceptée !
J'ai trouvé :P
Simplement il fallait que je déclare mon QUAD par QUAD[nombre]!
:)

Erreur bete



samedi 21 octobre 2006 à 23:01:24 | Re : Probleme de valeur dans mes class!

yann_lo_san

Oui mais tu n'as pas compris ton erreur en allouant avec QUAD[nombre] (alloc statique).
Cela ne te choque pas : CLASS c = CLASS(val,val,val,val); !!!!!?
Tu n'as pas défini de constructeur de copie (ni eventuellement d'operateur d'affectation) :
LAYER(const LAYER&);
Quant tu alloues avec "new" il faut obligatoirement un constructeur de copie.
C'est pourquoi en allouant statiquement ton QUAD[4], il n'y a plus d'erreur.

A par ça, ton programme à l'air interessant.



Cette discussion est classée dans : indice, layer, centrex, centrey, qwidth


Répondre à ce message

Sujets en rapport avec ce message

Division de deux tableaux d'entiers [ par BenHur ] Bonjour, j'ai deux tableaux d'entiers dont chaque indice contient un nombre de 0 à 9. Je dois faire des opérations mathématiques sur chacun de ces ind tableau de structures type pointeur [ par chocho ] Merci d'avoir répondu à ma demande d'aide.Voici la source sur laquelle je coince:#include#include#define maxlist 10int indicecourant;struct abonne Gestion d'entrées/sorties sur fichier [ par macrow ] Bonjour, Voici mon source : #include #include #include #include #include //******************************************** base de registre : fonction gerenumvalue [ par Daimadoshi ] mo code : while (ERROR_NO_MORE_ITEMS!=RegEnumValue(//trouve le nombre de valeurs contenues dans la cle m_CleOuverte,//Handle de la cle ouverte ind besoin d'eclaircissement sur les classes et pointeurs [ par oliarn ] bonjour,je fais un programme en c++ pour la fac e tj'aimerai savoir comment manipuler mes classes dans mon programmes.voila une fonction par exemple m Trouver l'indice d'un caractère dans une chaine de caractères [ par new0staff ] Bonjour tout le monde!Je cherche une fonction qui me permet de trouver l'indice d'un caractère dans une chaine de caractère.J'ai utilisé une boucle qu Probleme liste chainee [ par jomanix ] Comme je ne vois pas l'arbre au milieu de la foret je m'en remet a vousC'est un dictionnaire et pour l'instant je ve juste afficher mon arbre bianaire indice de refraction negatif [ par kmohamed ] je cherche a simuler numeriquement un indice de refraction negatif à partir des equations de Maxwell qqun peut il m'aider,merci UPDATE ... WHERE l'indice est le plus grand [ par romydamour ] bonjour tout le monde, [APIwin32 sous visualc++]voila j'ai inséré dans la table SPB1502AL les champs P95,P96,P97.<SPAN style="FONT-SIZE: 10pt; FONT-FA [.NET] fichier texte + indice [ par fab3131 ] Bonjour à tousEnfait j'ai un fichier texte sur le disque dur et lorsque j'appui sur un bouton il me le déplace dans un autre endroit, j'utilise pour ç


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,014 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales