Como você std :: vetor no xcode+c ++? [fechado
Pergunta
Por várias razões (e eu garanto que elas são válidas, portanto, não "use cacau", por favor), devo trabalhar com Xcode, C ++, OpenGL, OpenCL (com um pouco de excesso de lado) para reconstruir alguns demos gráficos no Mac no Mac (vindo do desenvolvimento do XP + Visual Studio 2005). O projeto foi construído como uma ferramenta de linha de comando usando "C ++ STDC ++".
Meu arquivo program.h conecta meus objetos de shader, compila, links e os prepara para uso como programas de shader openGL. Contidos neste arquivo estão as seguintes linhas de código relevantes:
#include <vector>
using std::vector;
e dentro da seção particular da classe:
vector<int> shaderHandles;
E ao adicionar alças de shader:
shaderHandles.push_back(shaderHandle);
E finalmente, ao usar as alças do shader empurrado:
for (int s = 0; s < (int) shaderHandles.size(); s++)
{
glAttachShader(handle, shaderHandles[s]);
}
Em toda a minha experiência e pesquisa, não há nada de errado com essas linhas no C ++. No entanto, ao compilar (seja depuração ou liberação, portanto não está relacionado ao _GLIBCXX_DEBUG
problema), os 4 erros a seguir são gerados:
/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'
Além disso, o arquivo que links para stl_bvector.h e vetor.tcc é:
/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/vector
Até agora, inúmeras pesquisas no Google não aumentaram nada. Todo esse código funciona perfeitamente no Windows. Pior, se eu substituir o código acima pelos equivalentes da lista:
#include <list>
using std::list;
e,
list<int> shaderHandles;
e,
for (list<int>::iterator s = shaderHandles.begin(); s != shaderHandles.end(); s++)
{
glAttachShader(handle, *s);
}
O programa funciona conforme o esperado.
Mas não se pode culpar isso inteiramente pela implementação do vetor, porque o seguinte 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 sem problemas.
Ficarei feliz em fornecer mais informações conforme necessário.
Por favor, não me diga que eu deveria usar cacau/objective-c; Não é realmente uma opção agora. E, embora sim, posso usar listas para realizar essa funcionalidade, outras partes da minha demonstração não são tão fáceis de retrabalhar.
Solução
Sinto muito a todos. Poucos minutos depois de postar isso, decidi continuar com o que pude, salvando esse problema para mais tarde. Encontrei um problema semelhante ocorrendo com o Fream. Com esta nova informação disponível, uma pesquisa no Google trouxe à tona Este tópico, e, finalmente, a solução.
Eu havia definido meus próprios MIN e Max Macros em meus arquivos de matemática vetorial completamente não relacionados. A solução foi remover minhas macros e colocar o std :: em frente às chamadas Min e Max.
Outras dicas
Você verificou a documentação do MAC SDK, que funções eles declaram para a classe vetorial? Talvez você tenha definido algumas bandeiras do compilador? Além disso, você pode fazer o mesmo com o vetor que fez para a lista, usando iteradores para digitalizar através do seu vetor.