2010-01-10 4 views
1

J'enanoutered un problème avec un code similaire à ceconteneurs STL ne parvient pas à ajouter une structure définie dans une fonction

void aFuncion() 
{ 
    struct entry 
    { 
     std::string field1; 
     int   field2; 
     int   field3; 

     entry(const entry& ent) 
     { 
      // copy constructor code 
     } 

     entry() 
     { 
      // default constructor code 
     } 

     entry(std::string s, int a, int b) 
     { 
      field1 = s; 
      field2 = a; 
      field3 = b; 
     } 

    }; //end of structure definition 

    std::vector<entry> vec; 
    entry en("a string", 1, 2); 

    vec.push_back(en); // vec has garbage in index 0 
} 

après avoir poussé l'entrée dans le vecteur débogueurs ne montre que les ordures dans le premier vecteur d'entrée.

le problème a été résolu une fois que nous avons retiré la définition de structure de la fonction.
Pourquoi le problème est-il survenu lors de la résolution de la définition de la fonction?

(nous travaillons avec VS 2008 sur XP 32 bits)

+4

L'indice de l'entrée serait 0, pas 1. –

+0

@Neil grassette: vous avez raison bien sûr, je l'ai corrigé la remarque – Tom

+1

std :: vecteur ne dispose pas d'une fonction push(). Vous voulez probablement dire push_back(). Aussi, s'il vous plaît supprimer l'entrée: avant de vous. –

Répondre

7

La norme actuelle de C++ ne permet pas aux arguments de modèle à des types définis localement. Ceci est corrigé dans la prochaine version de la norme.

14.3.1/2:

Un type local, un type sans lien, un type sans nom ou un type composé d'un de ces types ne doit pas être utilisé comme un modèle argument pour un modèle type-paramètre.

+0

@avakar: un exemple similaire compilé dans notre application, donc VS, du moins en théorie, le supporte. Je demandais pourquoi cela ne fonctionnait pas comme prévu. – Tom

+1

Oui, VS2008 supporte cela comme une extension (tout comme gcc, je crois). Apparemment, le débogueur ne gère pas cela correctement et vous ne pouvez pas vraiment le blâmer. – avakar

+3

Une belle illustration de l'inutilité générale des extensions de langage! –

Questions connexes