Pour diverses raisons (et je vous assure qu'elles sont valides, donc pas de conversation "Cocoa"), je dois travailler avec XCode, C++, OpenGL, OpenCL (avec un peu de GLUT) pour reconstruire quelques démos graphiques sur Mac (issu du développement XP + Visual Studio 2005). Le projet a été construit comme un outil de ligne de commande en utilisant "C++ stdC++". Mon fichier Program.h connecte mes objets de shader, les compile, les lie et les prépare à l'utilisation en tant que programmes de shaders OpenGL. Contenues dans ce fichier sont les suivantes lignes pertinentes du code:Comment std :: vector dans XCode + C++?
#include <vector>
using std::vector;
et dans la partie privée de la classe:
vector<int> shaderHandles;
et lors de l'ajout poignées shaders:
shaderHandles.push_back(shaderHandle);
et enfin , lors de l'utilisation des poignées de shader poussées:
for (int s = 0; s < (int) shaderHandles.size(); s++)
{
glAttachShader(handle, shaderHandles[s]);
}
Dans toute mon expérience et mes recherches, il n'y a rien de mal avec ces lignes en C++. Cependant, lors de la compilation (si debug ou release, il est donc pas lié au problème _GLIBCXX_DEBUG
), les 4 erreurs suivantes 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'
En outre, le fichier qui lie à stl_bvector.h et vector.tcc est:
/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/vector
Jusqu'à présent, de nombreuses recherches sur Google n'ont rien donné. Tout ce code fonctionne parfaitement sur Windows. Pire encore, si je remplace le code ci-dessus avec les équivalents de liste:
#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 ce ENTIEREMENT sur la mise en œuvre du vecteur, parce que 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 avec aucun problème.
Je me ferai un plaisir de fournir plus d'informations si nécessaire.
S'il vous plaît ne me dites pas que je devrais utiliser Cocoa/Objective-C; ce n'est pas vraiment une option pour le moment. Et bien que oui, je peux utiliser des listes pour accomplir cette fonctionnalité, d'autres parties de ma démo ne sont pas si faciles à retravailler.
Merci pour votre réponse rapide. Non, je n'ai pas vérifié la documentation de Mac SDK. J'ai lu un peu le code et je n'ai rien trouvé d'anormal. Aucun indicateur de compilation. Oui, je peux, mais C était ma première langue, donc je suis plus habitué à la syntaxe de tableau, et franchement tout ce que l'itérateur est tellement à taper. Merci, mais j'ai * soupir * compris quelques minutes après avoir posé la question, malgré des heures passées dessus. – Dwight