2010-12-06 2 views
1

Peut-être lié à mon autre question (note: autre code d'erreur):Pourquoi l'erreur "erreur fatale C1075" peut-elle se produire par intermittence lors de l'utilisation de msbuild?

Notre esclave buildbot compile tous les soirs notre code source et fonctionne la plupart du temps, mais par intermittence, nous voyons cette erreur:

c:\Program Files\Microsoft Visual Studio 9.0\VC\include\xtree(223) : fatal error C1075: end of file found before the left brace '{' at '..\lib\net\CSocketMultiplexer.cpp(62)' was matched 
     c:\Program Files\Microsoft Visual Studio 9.0\VC\include\xtree(427) : see reference to class template instantiation 'std::_Tree<_Traits>::const_iterator' being compiled 
     with 
     [ 
      _Traits=std::_Tmap_traits<ISocket *,CSocketMultiplexer::CJobCursor,std::less<ISocket *>,std::allocator<std::pair<ISocket *const ,CSocketMultiplexer::CJobCursor>>,false> 
     ] 
     ..\lib\net\CSocketMultiplexer.cpp(75) : see reference to class template instantiation 'std::_Tree<_Traits>::iterator' being compiled 
     with 
     [ 
      _Traits=std::_Tmap_traits<ISocket *,CSocketMultiplexer::CJobCursor,std::less<ISocket *>,std::allocator<std::pair<ISocket *const ,CSocketMultiplexer::CJobCursor>>,false> 
     ] 

Voir la full log output et CSocketMultiplexer.cpp - y at-il quelque chose que je peux changer CSocketMultiplexer.cpp qui pourrait arrêter e est d'arriver à l'avenir?

aussi, sans doute pas utile de mentionner, mais plus tard dans le journal, on voit cette erreur (ce qui est logique totale, car le fichier n'a pas été compilé):

Copyright (C) Microsoft Corporation. All rights reserved. 
BSCMAKE: error BK1506 : cannot open file '.\synergy.dir\Debug\CSocketMultiplexer.sbr': No such file or directory 
+0

Pourquoi CNetworkAddress.cpp être compilé si l'erreur est CSocketMultiplexer.cpp? Se pourrait-il qu'il y ait #include drôle de fichier cpp? En outre, cette erreur se produit-elle seulement parfois avec la même source (comme un bogue de compilateur), ou toujours avec la version spécifique de la source? – Dialecticus

+0

@Dialecticus Désolé, c'était trompeur; CNetworkAddress.cpp était le fichier qui a été compilé (avec succès) avant CSocketMultiplexer.cpp - j'ai enlevé ceci de l'extrait puisque cela n'a probablement rien à voir avec l'erreur. –

Répondre

1

A en juger par cela et l'autre question, je commence à mettre mon argent sur "l'échec du matériel". Peut-être qu'un bit de l'une de vos puces RAM est défectueux, donc si vous venez de frapper cet octet, un '}' deviendra autre chose. Je cours un outil de test de RAM.

Cette machine présente-t-elle un autre comportement étrange? Des accidents aléatoires rares, par exemple?

+1

Juste pour répéter de mon autre question: Exécuter memtest86 + a révélé 2 erreurs dans les 2 premières minutes d'exécution. Peut-être qu'il est temps pour une nouvelle RAM. –

+0

Oui, je me suis dit. C'est typiquement l'explication des échecs aléatoires comme ça. – EboMike

+0

Haha, j'allais remplacer la RAM d'abord pour être sûr à 100% que vous aviez raison. Ne t'inquiète pas, je n'oublierai pas. –

0

J'ai eu le même problème.

Les erreurs de compilation sont:

* main.cpp (325): erreur C2601: 'FLAG': définitions de fonctions locales sont illégales

main.cpp (323): cette ligne contient un « { 'qui n'a pas encore été égalée

main.cpp (326): erreur fatale C1075: fin de fichier trouvé avant l'accolade gauche '{' à 'main.cpp (323)' a été adapté *

Mais il n'y avait rien de mal avec mon code. J'ai compté toutes les parenthèses et le nombre correspondant. Il n'y avait aucune fonction dans une autre fonction. J'ai résolu le problème en supprimant tous les commentaires "//" du code source. Il semble que la raison en soit une mauvaise mise en forme de ligne qui fait que le compilateur manque un saut de ligne, donc la ligne après un commentaire est également traitée comme un commentaire.

Par exemple:

// This is a comment 

This_is_a_line; 

est traitée comme:

// This is a comment This_is_a_line; 
Questions connexes