Pregunta

Por varios motivos (y le aseguro que son válidos, así que no use Cocoa " hablar, por favor), debo trabajar con XCode, C ++, OpenGL, OpenCL (con un poco de GLUT en el costado) para reconstruir algunos Demostraciones de gráficos en Mac (procedentes del desarrollo de XP + Visual Studio 2005). El proyecto se creó como una herramienta de línea de comandos utilizando " c ++ stdc ++ " ;.

El archivo My Program.h conecta mis objetos de sombreado, los compila, los vincula y los prepara para su uso como programas de sombreado de OpenGL. Dentro de este archivo se encuentran las siguientes líneas de código relevantes:

#include <vector>
using std::vector;

y dentro de la sección privada de la clase:

vector<int> shaderHandles;

y al agregar controladores de sombreado:

shaderHandles.push_back(shaderHandle);

y finalmente, cuando se usan los controladores de sombreado empujados:

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

En toda mi experiencia e investigación, no hay nada de malo en estas líneas dentro de C ++. Sin embargo, al compilar (ya sea depuración o lanzamiento, por lo que no está relacionado con el problema _GLIBCXX_DEBUG ), se generan los siguientes 4 errores:

/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'

Además, el archivo que enlaza con stl_bvector.h y vector.tcc es:

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

Hasta ahora, numerosas búsquedas en Google no han mostrado nada. Todo este código funciona perfectamente en Windows. Peor aún, si reemplazo el código anterior con los equivalentes de la lista:

#include <list>
using std::list;

y,

list<int> shaderHandles;

y,

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

El programa funciona como se esperaba.

Pero no se puede culpar TOTALMENTE de la implementación del vector, porque el siguiente programa:

#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;
}

Funciona sin problemas.

Estaré encantado de proporcionar más información según sea necesario.

Por favor, no me digas que debo usar Cocoa / Objective-C; No es realmente una opción en este momento. Y aunque sí, puedo usar listas para lograr esta funcionalidad, otras partes de mi demostración no son tan fáciles de volver a trabajar.

¿Fue útil?

Solución

Lo siento mucho a todos. Pocos minutos después de publicar esto, decidí continuar con lo que podía, guardando este problema para más adelante. Encontré un problema similar que ocurre con fstream. Con esta nueva información disponible, una búsqueda en Google mostró este tema y, en última instancia, la solución. .

Había definido mis propias macros mínimas y máximas en mis archivos vectoriales no relacionados completamente relacionados. La solución fue eliminar mis macros y colocar std :: delante de las llamadas mínimas y máximas.

Otros consejos

¿Verificaste la documentación del SDK de Mac, qué funciones declaran para la clase vectorial? Tal vez hayas establecido algunas banderas compilador? También puedes hacer lo mismo para el vector que hiciste para la lista, usando iteradores para escanear a través de tu vector.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top