2012-08-25 3 views
0

J'utilise l'IDE Codeblock avec MingW, j'ai un problème continu avec les types d'erreurs suivants. (Fichier || message)Compliler donne une erreur dans la fonction non-sens

obj\CEntity.o(.text+0x71a) || In function `ZN7CEntity6OnMoveEff': 

OU

obj\CArea.o(.bss+0x0) || In function `ZNSt6vectorI5CTileSaIS0_EEaSERKS2_': 
obj\CApp_OnCleanup.o(.bss+0x0):C:\DevCpp\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\include\c++\3.4.2\bits\vector.tcc || first defined here 

Notez qu'il donne l'emplacement comme une sorte de fichier obj je ne peux pas voir où il est dans mon code.

Mon C++ s'améliore beaucoup, mais je ne suis toujours pas très bonne compréhension comment les compilateurs fonctionnent et je ne peux pas comprendre ce qui pourrait causer le problème ou comment s'y prendre pour résoudre les problèmes comme celui-ci. Contrairement à un problème de code il est vraiment difficile de google parce que les noms ont été brouillés .

J'espère que quelqu'un peut aider parce qu'il me retient et je ne trouve pas ou trouver une solution!

(j'ai décidé de ne pas publier mon code parce qu'il est beaucoup de fichiers reliés entre eux et je ne sais où l'erreur est mais je suis en train de suivre les tutoriels sur http://www.sdltutorials.com/sdl-tutorial-basics. Les premiers que je peux obtenir de travailler mais les plus tardives semblent toujours à l'échec. il est évidemment quelque chose que je fais mal parce que quand j'utiliser l'exemple de cela fonctionne.)

+6

Cela s'appelle mangling. Ne vous inquiétez pas à ce sujet, regardez les messages d'erreur réels, pas leur contexte. (BTW, ce sont des erreurs de liens, pas des erreurs de compilateur.) – Mat

+0

Il semble que le MinGW que vous utilisez - ou du moins les fichiers stl qu'il regarde - est assez vieux (3.4.2 à partir de 2004, il semble). Un reste d'une ancienne installation DevCpp peut-être? Si vous avez installé la version CodeBlocks fournie avec son propre MinGW, essayez de nettoyer vos variables de chemin pour vous assurer qu'il n'y a pas de restes de votre DevCpp MinGW. Ou simplement désinstaller DevCpp et CodeBlocks et réinstaller CodeBlocks avec MinGW ... – sonicwave

+0

Merci beaucoup! – Beetroot

Répondre

0

de nombreuses distributions du CCG (comme les distros MinGW j'utilise) sont livrés avec un nom d'utilité c++filt qui transformera un nom brouillé C++ en quelque chose de plus proche de la déclaration du code source (je pense que vos messages d'erreur ont omis certains traits de soulignement):

C:\temp>c++filt __ZN7CEntity6OnMoveEff 
CEntity::OnMove(float, float) 

MSVC est livré avec un utilitaire similaire: undname

Cependant, vous pouvez mettre à jour le MinGW que vous utilisez. Je reçois de belles, les noms demangled directement dans la sortie d'erreur de retourner à MinGW 3.4.5 (même pour MSVC retourner à VC++ 6):

class CEntity { 
    public: 
     void OnMove(float, float); 
}; 

int main() 
{ 
    CEntity ent; 
    ent.OnMove(1., 2.); 
} 

compilé avec MinGW 3.4.5:

C:\temp>g++ -o test.exe test.cpp 
C:\...\ccwlXEih.o:test.cpp:(.text+0x43): undefined reference to `CEntity::OnMove(float, float)' 
+0

Merci! Je pensais avoir téléchargé le dernier, mais je vais essayer de mettre à jour par MinGW maintenant! – Beetroot

Questions connexes