2009-10-23 3 views
3

По различным причинам (и я уверяю вас, что они действительны, поэтому нет необходимости использовать «Какао»), я должен работать с 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; сейчас это не вариант. И хотя да, я могу использовать списки для выполнения этой функции, другие части моей демонстрации не так просто переделать.

ответ

3

Мне так жаль всех. Через несколько минут после публикации этого вопроса я решил продолжить то, что мог, сохранив эту проблему позже. Я нашел аналогичную проблему, возникающую с fstream.Благодаря этой новой информации поиск Google поднял this topic и, в конечном итоге, решение.

Я определил свои собственные макросы min и max в своих полностью несвязанных векторных математических файлах. Решение заключалось в том, чтобы удалить мои макросы и поместить std :: перед вызовами min и max.

0

Вы проверили документацию Mac SDK, какие функции они объявляют для векторного класса? Возможно, вы установили несколько флагов компилятора? Также вы можете сделать то же самое для вектора, что и для списка, используя итераторы для сканирования через ваш вектор.

+0

Спасибо за ваш быстрый ответ. Нет, я не проверял документацию Mac SDK. Я немного прочитал код и не нашел ничего необычного. Нет флагов компилятора. Да, я могу, но C был моим первым языком, поэтому я больше привык к синтаксису массива, и, откровенно говоря, все, что итераторный материал так много набирает. Спасибо, хотя я * вздох * выяснил это через несколько минут после того, как задал вопрос, несмотря на то, что провел там несколько часов. – Dwight

Смежные вопросы