2010-09-23 4 views
1

J'ai fait un post à ce sujet hier, mais c'est une question assez différente. Je ne sais pas si je devrais faire une nouvelle question ou simplement répondre à l'ancienne mais ici va.Questions concernant le tableau vectoriel des structures

En fait, je suis en train de mon tableau de vecteurs de struct comme suit ..

class Debugger : public Ogre::SimpleRenderable 
{ 
    struct DebugVertex 
    { 
     Ogre::Vector3 v; 
     unsigned int color; 
    }; 

    typedef std::vector<DebugVertex> Buffer; 

protected: 

    Buffer    mLineBuffer; 

Le problème est produit dans le code exemple ...

mLineBuffer.reserve (128); signale qu'il n'est pas membre de Debugger :: DebugVertex. Cela est vrai pour toutes les opérations vectorielles telles que la réserve, le vide, le ptr, la taille, etc. Elles existent toutes mais elles sont recherchées dans la structure. Comment suis-je censé y accéder?

+0

Que faire si vous supprimez le typedef et déclarez directement: std :: vector mLineBuffer – vulkanino

+0

Pouvez-vous afficher une sortie de diagnostic pertinente? –

+0

Pouvez-vous nous montrer comment vous essayez de vous «réserver»? – Naveen

Répondre

0

Quelle est l'erreur exacte du compilateur? Ma conjecture est que DebugVertex ne se conforme pas à l'interface requise pour l'inclusion dans les conteneurs STL comme std::vector, peut-être parce que Ogre::Vector3 a besoin de travaux.

Pouvez-vous inclure la déclaration pour Ogre::Vector3?

+0

Eh bien, pour une raison quelconque, je viens de recompiler sans rien changer (pour ramener les erreurs) et il compilé bien moins quelques erreurs simples. Je ne sais pas ce qui les a causé avant, mais pour une raison quelconque, ils sont partis. Je me demande cependant, utArray (ce que je remplace avec le vecteur) utilisé mLineBuffer.ptr(); Je ne peux pas trouver une fonction équivalente dans le vecteur, n'est-ce pas? –

+0

Ogre :: Le code Vector3 est disponible en ligne, voir http://ogre3d.org – Klaim

+2

@Brett: Que fait la méthode ptr d'utArray? Vous pouvez juste chercher '& mLineBuffer [0]', si ma supposition est correcte que ptr retourne un pointeur sur le tableau interne. –

1

Votre typedef utilisant une structure privée, tout code en dehors de la classe Débogueur essayant de l'utiliser ne sera pas compilé.

std :: vecteur ne fait pas partie de votre classe ...

Ou faire std :: vecteur < DebugVertex> une classe ami (n'a pas testé, doivent vérifier) ​​ou simplement rendre public votre structure.

Questions connexes