Domanda

Per vari motivi (e ti assicuro che sono validi, quindi non usare "Cocoa" per favore), devo lavorare con XCode, C ++, OpenGL, OpenCL (con un po 'di GLUT sul lato) per ricostruire alcuni demo grafiche su Mac (provenienti dallo sviluppo di XP + Visual Studio 2005). Il progetto è stato creato come uno strumento da riga di comando usando " c ++ stdc ++ " ;.

Il mio file Program.h collega i miei oggetti shader insieme, li compila, li collega e li prepara per l'uso come programmi shader OpenGL. All'interno di questo file sono contenute le seguenti righe di codice rilevanti:

#include <vector>
using std::vector;

e all'interno della sezione privata della classe:

vector<int> shaderHandles;

e quando si aggiungono handle di shader:

shaderHandles.push_back(shaderHandle);

e infine, quando si usano le maniglie shader spinte:

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

In tutta la mia esperienza e ricerca, non c'è niente di sbagliato in queste righe in C ++. Tuttavia, durante la compilazione (se debug o rilascio, quindi non è correlato al problema _GLIBCXX_DEBUG ), vengono generati i seguenti 4 errori:

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

Inoltre, il file che collega a stl_bvector.h e vector.tcc è:

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

Finora, numerose ricerche su Google non hanno prodotto nulla. Tutto questo codice funziona perfettamente su Windows. Peggio ancora, se sostituisco il codice sopra con l'elenco equivalente:

#include <list>
using std::list;

e

list<int> shaderHandles;

e

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

Il programma funziona come previsto.

Ma non si può incolpare TUTTO questo sull'implementazione vettoriale, perché il seguente programma:

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

Funziona senza problemi.

Sarò felice di fornire ulteriori informazioni se necessario.

Per favore, non dirmi che dovrei usare Cocoa / Objective-C; non è davvero un'opzione in questo momento. E mentre sì, posso usare gli elenchi per realizzare questa funzionalità, altre parti della mia demo non sono così facili da rielaborare.

È stato utile?

Soluzione

Sono così dispiaciuto a tutti. Pochi minuti dopo aver pubblicato questo, ho deciso di continuare con quello che potevo, salvando questo problema per dopo. Ho riscontrato un problema simile con fstream. Con queste nuove informazioni disponibili, una ricerca su Google ha portato questo argomento e, infine, la soluzione .

Avevo definito le mie macro min e max nei miei file matematici vettoriali completamente non correlati. La soluzione era quella di rimuovere le mie macro e mettere std :: davanti alle chiamate min e max.

Altri suggerimenti

Hai controllato la documentazione dell'SDK per Mac, quali funzioni dichiarano per la classe vettoriale? Forse hai impostato alcuni flag del compilatore? Inoltre puoi fare lo stesso per il vettore come per l'elenco, usando gli iteratori per scansionare il tuo vettore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top