Comment avez-vous std::vector dans XCode + C++?

Pour diverses raisons (et je peux vous assurer qu'ils sont valides, donc pas de "l'utilisation de Cacao" parler s'il vous plaît), je dois travailler avec XCode, C++, OpenGL, OpenCL (avec un peu de SURABONDANCE sur le côté) à la reconstruction de quelques graphiques démos sur Mac (en venant de XP + de développement Visual Studio 2005). Le projet a été construit comme un Outil de Ligne de Commande à l'aide de "c++ stdc++".

Mon Programme.h fichier connecte mon shader ensemble des objets, compile, des liens, et sinon les prépare pour l'utiliser comme OpenGL shader programmes. Contenues dans ce fichier sont les suivantes lignes de code:

#include <vector>
using std::vector;

et dans la partie privée de la classe:

vector<int> shaderHandles;

et lors de l'ajout de shader poignées:

shaderHandles.push_back(shaderHandle);

et enfin, lors de l'utilisation de la poussée shader poignées:

for (int s = 0; s < (int) shaderHandles.size(); s++)
{
    glAttachShader(handle, shaderHandles[s]);
}

Dans toute mon expérience et de recherche, il n'y a rien de mal avec ces lignes en C++. Cependant, lors de la compilation (debug ou release, il n'est donc pas liée à la _GLIBCXX_DEBUG problème), les 4 erreurs sont générées:

/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/bits/stl_bvector.h:916: error: 'size' is not a member of 'std'
/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/bits/stl_bvector.h:961: error: 'size' is not a member of 'std'
/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/bits/vector.tcc:350: error: '__old_size' is not a member of 'std'
/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/bits/vector.tcc:453: error: '__old_size' is not a member of 'std'

Aussi, le fichier des liens vers stl_bvector.h et le vecteur.la stc est:

/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/vector

À ce jour, de nombreuses recherches sur Google ont n'ont rien révélé. Tout ce code fonctionne parfaitement sur Windows. Pire, si je remplace le code ci-dessus avec la liste des équivalents:

#include <list>
using std::list;

et,

list<int> shaderHandles;

et,

for (list<int>::iterator s = shaderHandles.begin(); s != shaderHandles.end(); s++)
{
    glAttachShader(handle, *s);
}

Le programme fonctionne comme prévu.

Mais on ne peut pas blâmer ENTIÈREMENT sur le vecteur de la mise en œuvre, car le programme suivant:

#include <iostream>
#include <vector>
using std::vector;

int main (int argc, char * const argv[])
{
    vector<int> test;

    test.push_back(1);
    test.push_back(2);
    test.push_back(3);

    test.clear();
    return 0;
}

Fonctionne sans problèmes.

Je serai heureux de vous fournir plus d'informations que nécessaire.

S'il vous plaît ne me dites pas que je devrais utiliser Cocoa/Objective-C; il n'est pas vraiment une option à l'heure actuelle. Et alors oui, je peux utiliser des listes pour accomplir cette fonctionnalité, d'autres parties de mon démo ne sont pas si facile à retravailler.

OriginalL'auteur Dwight | 2009-10-23