IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Compilation code source


Sujet :

C++

  1. #1
    Membre confirm�
    Inscrit en
    Mars 2005
    Messages
    137
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 137
    Par d�faut Compilation code source
    Bonjour je suis en train d'essayer de compiler un code source mais j'ai des problemes lors de la compilation que je comprends pas le code a �t� d�velopp� sous VC et je l'ai adapt� sous linux.

    Voici le message d'erreur

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    g++ -c Analysis.cpp -o Analysis.o
    Analysis.cpp: In function 'void DiscardMotif()':
    Analysis.cpp:108: error: no match for 'operator=' in 'MotifIter = MotifMap. std::map<_Key, _Tp, _Compare, _Alloc>::erase [with _Key = int, _Tp = MotifItem_t, _Compare = std::less<int>, _Alloc = std::allocator<std::pair<const int, MotifItem_t> >](MotifIter)'
    /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_tree.h:152: note: candidates are: std::_Rb_tree_iterator<std::pair<const int, MotifItem_t> >& std::_Rb_tree_iterator<std::pair<const int, MotifItem_t> >::operator=(const std::_Rb_tree_iterator<std::pair<const int, MotifItem_t> >&)
    Analysis.cpp: In function 'void UniqueMotif()':
    Analysis.cpp:126: error: no match for 'operator=' in 'Next = MotifMap. std::map<_Key, _Tp, _Compare, _Alloc>::erase [with _Key = int, _Tp = MotifItem_t, _Compare = std::less<int>, _Alloc = std::allocator<std::pair<const int, MotifItem_t> >](Next)'
    /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_tree.h:152: note: candidates are: std::_Rb_tree_iterator<std::pair<const int, MotifItem_t> >& std::_Rb_tree_iterator<std::pair<const int, MotifItem_t> >::operator=(const std::_Rb_tree_iterator<std::pair<const int, MotifItem_t> >&)
    make: *** [Analysis.o] Error 1
    Merci de votre aide

  2. #2
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    En gros, il se plaint du fait qu'il n'y a pas d'op�rateur d'affectation...

    Il te signale que ce l'op�rateur d'affectation possible passe par un it�rateur de type std::pair.

    Visiblement, si on en croit les renseignements donn�s, tu essaie de supprimer une entr�e dans un tableau associatif de type std::map<int, MotifItem_t>.

    La fonction erase de la std::map utilise un it�rateur, et il est donc vraissemblable que tu doive disposer d'un it�rateur sur l'�l�ment � supprimer:
    • Soit en tant que membre de ta classe
    • Soit fournis comme param�tre � ta fonction
    • Soit recherch� dans la fonction sur base d'une cl� fournie en param�tre de la fonction


    PS: Il aurait �t� beaucoup plus facile pour tout le monde si tu avais fournis le code des fonctions incrimin�es, � savoir DiscardMotif et UniqueMotif
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  3. #3
    Membre confirm�
    Inscrit en
    Mars 2005
    Messages
    137
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 137
    Par d�faut
    pas de probleme les voici :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    void DiscardMotif()
    {
    	map<int,MotifItem_t>::iterator MotifIter;
    	bool bAdd;
     
    	for(MotifIter=MotifMap.begin();MotifIter!=MotifMap.end();bAdd?MotifIter++:MotifIter)
    	{
    		bAdd=false;
    		if((int)(unsigned int)(*MotifIter).second.ProteinID.size()<Motif_MemberSize)
    			MotifIter = MotifMap.erase(MotifIter);
    		else
    			bAdd=true;
    	}
    }
     
    void UniqueMotif()
    {
    	map<int, MotifItem_t>::iterator MotifIter, Next;
    	bool bAdd;
     
    	for(MotifIter=MotifMap.begin();MotifIter!=MotifMap.end();MotifIter++)
    	{
    		Next=MotifIter;
    		for(++Next;Next!=MotifMap.end();bAdd?Next++:Next)
    		{
    			bAdd=false;
    			if((*MotifIter).second.ProteinID==(*Next).second.ProteinID && (*MotifIter).second.ProteinPos[0]==(*Next).second.ProteinPos[0])
    				Next=MotifMap.erase(Next);
    			else
    				bAdd=true;
    		}
    	}
    }

  4. #4
    Membre confirm�
    Inscrit en
    Mars 2005
    Messages
    137
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 137
    Par d�faut
    j'ai enlev� "MotifIter =" dans la premi�re et "Next=" et il rale plus

  5. #5
    Membre confirm�
    Inscrit en
    Mars 2005
    Messages
    137
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 137
    Par d�faut
    par contre lors de la compilation en verufuant les bugs un par un j'ai obtenu �a comme message d'erreur


    g++ -c Analysis.cpp -o Analysis.o
    g++ -c MotifFinding5.cpp -o MotifFinding5.o
    g++ -c ReadProteinFile.cpp -o ReadProteinFile.o
    g++ -c stdafx.cpp -o stdafx.o
    g++ -c SubstitutionMatrix.cpp -o SubstitutionMatrix.o
    g++ -c Tools.cpp -o Tools.o
    g++ -o motif Analysis.o MotifFinding5.o ReadProteinFile.o stdafx.o SubstitutionMatrix.o Tools.o -g -g -lm -L blosum.h blosum62.h stdafx.h structure.h
    /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function `_start':
    (.text+0x20): undefined reference to `main'
    collect2: ld returned 1 exit status
    make: *** [motif] Error 1

  6. #6
    Membre confirm�
    Inscrit en
    Mars 2005
    Messages
    137
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 137
    Par d�faut
    j'ai trouv� le probl�me.

    Merci tout de meme de votre message

  7. #7
    Membre confirm�
    Inscrit en
    Mars 2005
    Messages
    137
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 137
    Par d�faut
    ou peut etre pas

    j'ai compil� j'ai lanc� et l� segmentation fault avec �a comme erreur

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    *** glibc detected *** ./motif: double free or corruption (fasttop): 0x00000000009a2260 ***
    ======= Backtrace: =========
    /lib64/libc.so.6[0x37ae470412]
    /lib64/libc.so.6(cfree+0x8c)[0x37ae473b1c]
    ./motif[0x408031]
    ./motif[0x408059]
    ./motif[0x4080a4]
    ./motif[0x408b32]
    ./motif[0x41566b]
    ./motif[0x4142b4]
    ./motif[0x40238a]
    ./motif[0x403bbb]
    ./motif[0x40f2da]
    /lib64/libc.so.6(__libc_start_main+0xf4)[0x37ae41dab4]
    ./motif(__gxx_personality_v0+0xb1)[0x4018b9]
    ======= Memory map: ========
    00400000-00421000 r-xp 00000000 00:20 8823532                            /groupes/poch/aniba/PattDT/motif
    00621000-00622000 rw-p 00021000 00:20 8823532                            /groupes/poch/aniba/PattDT/motif
    00622000-009af000 rw-p 00622000 00:00 0                                  [heap]
    37ae000000-37ae01a000 r-xp 00000000 fd:00 2193610                        /lib64/ld-2.6.so
    37ae21a000-37ae21b000 r--p 0001a000 fd:00 2193610                        /lib64/ld-2.6.so
    37ae21b000-37ae21c000 rw-p 0001b000 fd:00 2193610                        /lib64/ld-2.6.so
    37ae400000-37ae547000 r-xp 00000000 fd:00 2193611                        /lib64/libc-2.6.so
    37ae547000-37ae747000 ---p 00147000 fd:00 2193611                        /lib64/libc-2.6.so
    37ae747000-37ae74b000 r--p 00147000 fd:00 2193611                        /lib64/libc-2.6.so
    37ae74b000-37ae74c000 rw-p 0014b000 fd:00 2193611                        /lib64/libc-2.6.so
    37ae74c000-37ae751000 rw-p 37ae74c000 00:00 0
    37ae800000-37ae882000 r-xp 00000000 fd:00 2193622                        /lib64/libm-2.6.so
    37ae882000-37aea81000 ---p 00082000 fd:00 2193622                        /lib64/libm-2.6.so
    37aea81000-37aea82000 r--p 00081000 fd:00 2193622                        /lib64/libm-2.6.so
    37aea82000-37aea83000 rw-p 00082000 fd:00 2193622                        /lib64/libm-2.6.so
    37b4400000-37b440d000 r-xp 00000000 fd:00 2193623                        /lib64/libgcc_s-4.1.2-20070503.so.1
    37b440d000-37b460d000 ---p 0000d000 fd:00 2193623                        /lib64/libgcc_s-4.1.2-20070503.so.1
    37b460d000-37b460e000 rw-p 0000d000 fd:00 2193623                        /lib64/libgcc_s-4.1.2-20070503.so.1
    37b5000000-37b50e5000 r-xp 00000000 fd:00 987280                         /usr/lib64/libstdc++.so.6.0.8
    37b50e5000-37b52e5000 ---p 000e5000 fd:00 987280                         /usr/lib64/libstdc++.so.6.0.8
    37b52e5000-37b52eb000 r--p 000e5000 fd:00 987280                         /usr/lib64/libstdc++.so.6.0.8
    37b52eb000-37b52ee000 rw-p 000eb000 fd:00 987280                         /usr/lib64/libstdc++.so.6.0.8
    37b52ee000-37b5300000 rw-p 37b52ee000 00:00 0
    2aaaaaaab000-2aaaaaaac000 rw-p 2aaaaaaab000 00:00 0
    2aaaaaada000-2aaaaaadd000 rw-p 2aaaaaada000 00:00 0
    2aaaac000000-2aaaac021000 rw-p 2aaaac000000 00:00 0
    2aaaac021000-2aaab0000000 ---p 2aaaac021000 00:00 0
    7fffc4b6a000-7fffc4b80000 rw-p 7fffc4b6a000 00:00 0                      [stack]
    ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vdso]
    ce que j'ai fait dans les deux premi�res routines n'est peut etre pas ce qu'il fallait faire

  8. #8
    Membre confirm�
    Inscrit en
    Mars 2005
    Messages
    137
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 137
    Par d�faut
    �a peut venir des fonctions DiscardMotif() et UniqueMotif() ?

  9. #9
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Ceci dit, et sans vouloir �tre m�chant, j'ai rarement vu un code aussi

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    for(MotifIter=MotifMap.begin();MotifIter!=MotifMap.end();bAdd?MotifIter++:MotifIter)
    A choisir, je pr�f�rerais encore une simple boucle "tant que" du style
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    MotifIter=MotifMap.begin();
    while(MotifIter!=MotifMap.end())
    {
        /* reste du code */
        if(bAdd)
            MotifIter++;
    }
    qui aurait le meme effet.

    De m�me, pour le code
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    if((int)(unsigned int)(*MotifIter).second.ProteinID.size()<Motif_MemberSize)
        MotifIter = MotifMap.
    Heuu... je ne suis pas sur de bien comprendre l'utilit� de caster ProteinId.size() en entier non sign� (car size() renvoie d�j� un... entier non sign�, grace � un typdef unsigned int size_t), puis de le re caster en entier sign�...

    On peut, en outre, estimer que Motif_MembreSize ne sera jamais inf�rieur � 0...

    D�s lors, pourquoi ne pas, tout simplement, utiliser un entier non sign� comme type pour Motif_MemberSize, et s'�viter les casts inutiles

    Au final, le code pourrait tr�s bien �tre, tout simplement (apres avoir d�cid� d'utiliser une size_t comme type de Motif_membreSize)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    MotifIter=MotifMap.begin();
     
    while(MotifIter!=MotifMap.end())
    {
        if((*MotifIter).second.ProteinID.size()<Motif_MemberSize)
        {
            MotifIter = MotifMap.erase(MotifIter);
        }
        else
            MotifIter++;
    }
    (je me suis content� de garder une logique identique, mais en �vitant les tests inutiles )

    Il faut cependant tenir compte que, sauf erreur, la m�thode erase de la std::map invalide l'it�rateur, et que, en tout cas, elle ne renvoie pas un it�rateur (au mieux, elle renvoie le nombre d'�l�ments supprim�s, quand on fournis un it�rateur de d�but et un it�rateur de fin)

    De ma m�me mani�re, je dois avouer que la boucle
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    for(++Next;Next!=MotifMap.end();bAdd?Next++:Next)
    est, pour le moins... tendancieuse... voire, suspecte

    L� encore, une "simple" boucle "tant que" me semblerait bien plus adapt�e, ce qui donnerait un code, en prenant les remarques pr�c�dentes en compte, proche de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for(MotifIter=MotifMap.begin();MotifIter!=MotifMap.end();MotifIter++)
    {
        map<int, MotifItem_t>::iterator next=MotifIter;
        next++;
        while(next!=MotifMap.end())
        {
            if((*MotifIter).second.ProteinID==(*Next).second.ProteinID && 
               (*MotifIter).second.ProteinPos[0]==(*Next).second.ProteinPos[0])
                Next=MotifMap.erase(Next);
            else
                next++;
        }
    }
    (avec toujours la m�me remarque concernant la m�thode remove)

    Re PS: essaye d'�viter, quand tu pr�sente un code, d'avoir recours au caract�re de tabulation (essaie de le remplacer par 2,3 ou 4 espaces): il est g�n�ralement affich� comme �tant une succession de... 8 espaces, ce qui risque, � la longue, d'emmener le "code significatif" "au diable vaut vert"...
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  10. #10
    Membre confirm�
    Inscrit en
    Mars 2005
    Messages
    137
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 137
    Par d�faut
    tu peux etre mechant avec le code ya pas de soucis je l'ai recup�r� pour le tester et son auteur m'a dis que c mal cod� donc j'essaye de voir tout �a.
    merci pour les info je teste.

  11. #11
    Membre confirm�
    Inscrit en
    Mars 2005
    Messages
    137
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 137
    Par d�faut
    Dans MotifIter = MotifMap.erase(MotifIter); et Next=MotifMap.erase(Next); il rale toujours

  12. #12
    Membre confirm�
    Inscrit en
    Mars 2005
    Messages
    137
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 137
    Par d�faut
    si je fais par exemple MotifMap.erase(Next); au lieu de Next=MotifMap.erase(Next); �a compile sans probleme mais apres �a fait le meme message d'erreur que precedement , il ya un double free corruption

  13. #13
    Membre confirm�
    Inscrit en
    Mars 2005
    Messages
    137
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 137
    Par d�faut
    *** glibc detected *** ./motif: double free or corruption (fasttop): 0x00000000009a2260 ***
    ======= Backtrace: =========
    /lib64/libc.so.6[0x37ae470412]
    /lib64/libc.so.6(cfree+0x8c)[0x37ae473b1c]
    ./motif[0x40801d]
    ./motif[0x408045]
    ./motif[0x408090]
    ./motif[0x408af6]
    ./motif[0x41562f]
    ./motif[0x414278]
    ./motif[0x402376]
    ./motif[0x403ba7]
    ./motif[0x40f29e]
    /lib64/libc.so.6(__libc_start_main+0xf4)[0x37ae41dab4]
    ./motif(__gxx_personality_v0+0xb1)[0x4018b9]

  14. #14
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    C'est bien ce que je craignais... (mais je n'en �tais plus tout � fait s�r ), la m�thode erase invalide l'it�rateur.

    Tu peux peut �tre envisager de "jouer" avec la fonction std::remove_if, qui fait appel � un "pr�dicat" (une recherche sur le forum devrait te donner des explications sur la mani�re de faire ), ou essayer un code du genre de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    MotifIter=MotifMap.begin(); 
    while(MotifIter!=MotifMap.end())
    {
        if((*MotifIter).second.ProteinID.size()<Motif_MemberSize)
        {
            /* comme erase va invalider l'iterateur,
             *  on va travailler avec un iterateur temporaire
             */
            map<int,MotifItem_t>::iterator temp=MotifIter;
            /* on fait passer l'itérateur réel à l'élément suivant
             */
            MotifIter++;
            /* et on fait supprimer l'itérateur temporaire
             */
            MotifMap.erase(temp);
        }
        else
            MotifIter++;
    }
    Sinon, une m�thode qui risque de prendre pas mal de temps, serait de repartir du premier iterateur � chaque suppression (mais cela donnera un algorithme en !n -vu que cela retestera syst�matiquement tous les it�rateurs d�j� test�s � chaque fois qu'une suppression aura lieu- ce qui risque d'�tre d�sastreux du point de vue des performances)

    Cela donnerait un code du genre de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    MotifIter=MotifMap.begin(); 
    while(MotifIter!=MotifMap.end())
    {
        if((*MotifIter).second.ProteinID.size()<Motif_MemberSize)
        {
            MotifMap.erase(MotifIter);
            MotifIter=MotifMap.begin();
        }
        else
            MotifIter++;
    }
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  15. #15
    Membre confirm�
    Inscrit en
    Mars 2005
    Messages
    137
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 137
    Par d�faut
    euuh ouais je vois pas trop ce que tu veux dire au fait

    comme �a ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    void DiscardMotif()
    {
    	map<int,MotifItem_t>::iterator MotifIter;
    	bool bAdd;
       MotifIter=MotifMap.begin();
       while(MotifIter!=MotifMap.end())
       {
       map<int,MotifItem_t>::iterator temp=MotifIter;
        if((*MotifIter).second.ProteinID.size()<Motif_MemberSize)
        {
            MotifMap.erase(temp);
        }
        else
            MotifIter++;
            }
     
    }

  16. #16
    Membre confirm�
    Inscrit en
    Mars 2005
    Messages
    137
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 137
    Par d�faut
    est ce que je peux vous envoyer le package si �a ne te d�range pas trop juste pour voir ce qui cloche ds l'ex�cution , j'ai pas encore de debugger et je suis pas root

  17. #17
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Citation Envoy� par anibal Voir le message
    euuh ouais je vois pas trop ce que tu veux dire au fait

    comme �a ?
    <sniped code>
    Non, exactement tel que je l'ai indiqu�: comme cela
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    void DiscardMotif()
    {
        map<int,MotifItem_t>::iterator MotifIter=MotifMap.begin(); 
        while(MotifIter!=MotifMap.end())
        {
            if((*MotifIter).second.ProteinID.size()<Motif_MemberSize)
            {
                /* comme erase va invalider l'iterateur,
                 *  on va travailler avec un iterateur temporaire
                 */
                map<int,MotifItem_t>::iterator temp=MotifIter;
                /* on fait passer l'itérateur réel à l'élément suivant
                 */
                MotifIter++;
                /* et on fait supprimer l'itérateur temporaire
                 */
                MotifMap.erase(temp);
            }
            else
                MotifIter++;
        }
    }
    ou, pour la fonction UniqueMotif un truc du genre de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    void UniqueMotif()
    {
        map<int, MotifItem_t>::iterator MotifIter, Next;
        for(map<int, MotifItem_t>::iterator MotifIter=MotifMap.begin();
            MotifIter!=MotifMap.end();MotifIter++)
        {
            map<int,MotifItem_t>::iterator Next=MotifIter;
            Next++;
            while(Next!=MotifMap.end())
            {
                if((*MotifIter).second.ProteinID==(*Next).second.ProteinID && 
                  (*MotifIter).second.ProteinPos[0]==(*Next).second.ProteinPos[0])
                {
                    /*il faut aussi un iterateur  temporaire */
                    map<int,MotifItem_t>::iterator torem=Next;
                    Next++;
                    MotifMap.erase(torem);
                }
                else
                    Next++;
            }
        }
    }
    Quant � v�rifier tout le projet, je manque malheureusement de temps pour pouvoir le regarder de pr�s, mais, si tu joins le fichier zip � un message, peut �tre trouvera tu quelqu'un pour qui les journ�es ne devraient pas durer... 48heures
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  18. #18
    Membre confirm�
    Inscrit en
    Mars 2005
    Messages
    137
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 137
    Par d�faut
    le nug vient de l� au fait, ya qque chose qui cloche avec cette routine ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
     
    string Clustering()
    {
    	int max_score;
    	int i, j, node_id; // protein_id
    	map<pair<int, int>, int>::iterator DistanceIter;
    	string tree_str;
     
    	node_id = (int)(unsigned int)ProteinVector.size();
     
    	while((int)(unsigned int)DistanceMap.size()>1)
    	{
    		DistanceIter = DistanceMap.begin();
    		max_score=(*DistanceIter).second;
    		i=(*DistanceIter).first.first;
    		j=(*DistanceIter).first.second;
    		//max_score=0;
    		for(DistanceIter=DistanceMap.begin();DistanceIter!=DistanceMap.end();DistanceIter++)
    		{
    			if(max_score<(*DistanceIter).second)
    			{
    				max_score=(*DistanceIter).second;
    				i=(*DistanceIter).first.first;
    				j=(*DistanceIter).first.second;
    			}
    		}
    		//cout << "max_score=" << max_score << endl << i << "," << j << endl;
    		// merge i and j
    		NodePair.insert(make_pair(node_id, make_pair(i, j)));
    		DistanceMap.erase(make_pair(i, j));
    		ModifyDistanceMap(i, j, node_id);
    		EraseDistanceMap(i, j);
    		node_id++;
    	}
    	DistanceIter=DistanceMap.begin();
    	NodePair.insert(make_pair(node_id, make_pair((*DistanceIter).first.first, (*DistanceIter).first.second)));
     
    	tree_str=TreeExpression(node_id);
    	tree_str.append(";");
     
    	cout << tree_str << endl;
    	return tree_str;
    }

  19. #19
    Membre confirm�
    Inscrit en
    Mars 2005
    Messages
    137
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 137
    Par d�faut
    est ce que qqun peut me dire s'il ya qque chose qui cloche avec cette routine qui est certe mal cod�e mais qui normalement devrait fonctionner correctement ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    void EraseDistanceMap(int i, int j)
    {
    	map<pair<int, int>, int>::iterator DistanceIter;
    	bool bAdd;
    	int first_id, second_id;
     
    	for(DistanceIter=DistanceMap.begin();DistanceIter!=DistanceMap.end();bAdd?DistanceIter++:DistanceIter)
    	{
    		first_id = (*DistanceIter).first.first;
    		second_id = (*DistanceIter).first.second;
     
    		bAdd = true;
    		if(first_id == i || first_id == j || second_id == i || second_id == j)
    		{
    			DistanceMap.erase(DistanceIter);
    			bAdd = false;
    		}
    	}
    }

  20. #20
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Je ne suis pas s�r du test sur first_id et second_id...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. compiler code source de trueCrypt
    Par boubounagh dans le forum Visual C++
    R�ponses: 1
    Dernier message: 02/10/2012, 19h12
  2. compiler code source BIRT 4.0
    Par maatrihard dans le forum BIRT
    R�ponses: 0
    Dernier message: 30/06/2012, 20h28
  3. Ouvrir .vcproj, compiler codes sources
    Par Lyth_o dans le forum Visual Studio
    R�ponses: 3
    Dernier message: 06/11/2011, 18h46
  4. compiler code source en "interne"
    Par kespy13 dans le forum G�n�ral Java
    R�ponses: 5
    Dernier message: 30/04/2008, 14h46
  5. probleme compilation code source sur autre pc
    Par milach dans le forum Visual C++
    R�ponses: 1
    Dernier message: 18/04/2008, 09h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo