Question

Pour diverses raisons (et je vous assure qu'elles sont valables, n'utilisez donc pas "Cocoa" s'il-vous-plaît), je dois travailler avec XCode, C ++, OpenGL, OpenCL (avec un peu de GLUT sur le côté) pour reconstruire quelques démos graphiques sur Mac (provenant de XP + Visual Studio 2005). Le projet a été créé en tant qu'outil de ligne de commande avec "c ++ stdc ++".

Mon fichier Program.h relie mes objets de shader, les compile, les lie et les prépare autrement à une utilisation en tant que programmes OpenGL shader. Ce fichier contient les lignes de code pertinentes suivantes:

#include <vector>
using std::vector;

et dans la section privée de la classe:

vector<int> shaderHandles;

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

shaderHandles.push_back(shaderHandle);

et enfin, lorsque vous utilisez les 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’ya rien de mal à ces lignes en C ++. Toutefois, lors de la compilation (qu'il s'agisse du débogage ou de la publication, il n'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'

De plus, le fichier qui relie à 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 donné aucun résultat. Tout ce code fonctionne parfaitement sous Windows. Pire, si je remplace le code ci-dessus par 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 entièrement blâmer cela pour l'implémentation du vecteur, 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ème.

Je serai heureux 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 je puisse utiliser des listes pour réaliser cette fonctionnalité, d’autres parties de ma démo ne sont pas si faciles à retravailler.

Était-ce utile?

La solution

Je suis tellement désolé tout le monde. Quelques minutes après avoir posté ceci, j'ai décidé de continuer avec ce que je pouvais, en gardant ce problème pour plus tard. J'ai trouvé un problème similaire avec Fstream. Ces nouvelles informations étant disponibles, une recherche Google a permis de ce sujet et, finalement, de la solution. .

J'avais défini mes propres macros min et max dans mes fichiers mathématiques vectoriels totalement indépendants. La solution a été de supprimer mes macros et de placer std :: devant les appels min et max.

Autres conseils

Avez-vous consulté la documentation du SDK Mac, quelles fonctions déclarent-ils pour la classe de vecteurs? Peut-être avez-vous défini des drapeaux de compilation? Vous pouvez également faire de même pour le vecteur que pour la liste, en utilisant des itérateurs pour parcourir votre vecteur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top