По различным причинам (и я уверяю вас, что они действительны, поэтому нет необходимости использовать «Какао»), я должен работать с XCode, C++, OpenGL, OpenCL (с небольшим GLUT сбоку), чтобы перестроить несколько графических демонстраций на Mac (из XP + Visual Studio 2005). Проект был создан как инструмент командной строки с использованием «C++ stdC++».Как вы std :: vector в XCode + C++?
Файл My Program.h соединяет мои шейдерные объекты вместе, компилирует, связывает и иным образом готовит их для использования в качестве шейдерных программ OpenGL. Содержащиеся в этом файле следующие соответствующие строки кода:
#include <vector>
using std::vector;
и в приватной секции класса:
vector<int> shaderHandles;
и при добавлении шейдер ручки:
shaderHandles.push_back(shaderHandle);
и, наконец, , при использовании толкаемых шейдерных ручек:
for (int s = 0; s < (int) shaderHandles.size(); s++)
{
glAttachShader(handle, shaderHandles[s]);
}
Во всем моем опыте и исследованиях нет ничего плохого в этих строках внутри C++. Однако, при компиляции (будь то отладки или выпуска, так что это не связано с _GLIBCXX_DEBUG
проблемы), следующие 4 генерируются ошибки:
/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'
Кроме того, файл, который содержит ссылки на stl_bvector.h и vector.tcc является:
/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/vector
До сих пор многочисленные поисковые запросы Google ни к чему не привели. Весь этот код работает безупречно в Windows. Хуже того, если я заменю приведенный выше код со списком эквивалентов:
#include <list>
using std::list;
и
list<int> shaderHandles;
и
for (list<int>::iterator s = shaderHandles.begin(); s != shaderHandles.end(); s++)
{
glAttachShader(handle, *s);
}
Программа работает, как ожидалось.
Но нельзя винить в этом исключительно на реализацию вектора, потому что следующая программа:
#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;
}
работает без проблем.
Буду рад предоставить дополнительную информацию по мере необходимости.
Пожалуйста, не говорите мне, что я должен использовать Cocoa/Objective-C; сейчас это не вариант. И хотя да, я могу использовать списки для выполнения этой функции, другие части моей демонстрации не так просто переделать.
Спасибо за ваш быстрый ответ. Нет, я не проверял документацию Mac SDK. Я немного прочитал код и не нашел ничего необычного. Нет флагов компилятора. Да, я могу, но C был моим первым языком, поэтому я больше привык к синтаксису массива, и, откровенно говоря, все, что итераторный материал так много набирает. Спасибо, хотя я * вздох * выяснил это через несколько минут после того, как задал вопрос, несмотря на то, что провел там несколько часов. – Dwight