2010-08-12 4 views
0

Можно ли использовать векторы в Coca Touch? Если да, то какая библиотека должна быть включена?Векторы в какао Touch/Objective-C

Я следовал общий C учебник по им единственное, что нужно было, чтобы #include <vector>

Но XCode утверждает, что нет такого файла или каталога.

Оценивается любой указатель на библиотеку, предоставляющую такую ​​функциональность.

С уважением ~ DHP

+1

Векторы от C++, а не C. Это имеет много последствий. – zneak

+1

'#include ' is C++, а не C. – nmichaels

ответ

6

я понял это ... Выполните 3 шага ниже:

  1. Расширение имени файла с .mm
  2. #include "vector"
  3. Используйте этот код:

std::vector <<int>int> myVector(20); 
instead of just using vector <<int>int> myVector(20); 

Теперь у вас есть новый вектор C++, работающий в Objective-C.

+0

с использованием пространства имен std удалит необходимость f или указать пространство имен перед вектором – Stuartsoft

+0

Да, но использование 'using namespace std;' часто считается плохой практикой. – Sohcahtoa82

9

Objective-C является подмножеством C, и поэтому ничего C будет работать с ними. Тем не менее, std::vector является классом C++, что означает, что компилятор должен знать, что вы собираетесь использовать C, Objective-C и код C++ внутри вашей программы. Вы можете сделать это, изменив расширение ваших исходных файлов с .m на .mm.

Однако, если вы все еще находитесь на этапе обучения Objective-C или C++, старайтесь не смешивать с ним слишком много C++. C++ использует «не-POD-типы» (POD - «простые старые данные»), которые по своей сути несовместимы с функциями, которые принимают вариативные аргументы; под капотом, все Цели-C-вызовы работают таким образом, что может затруднить работу с типами C++ с помощью вызовов Objective-C, если вы не слишком уверены в том, как все это работает. Вы также можете использовать класс Cocoa NSMutableArray.

+0

Благодарим вас за отличный ответ. Я долгое время работал с ObjC, но мне никогда не приходилось идти на C++ (вообще в жизни и после прохождения Basic/Pascal/Fortran/VB.Net/C#/ObjC и в последнее время Java (так же, как я попадая в андроида) Но после того, как все, что я до сих пор боюсь :(C++ BTW, это библиотека, я хочу играть с: http://wiki.secondlife.com/wiki/Color_conversion_scripts с уважением и снова спасибо большое время –

+1

@ dhomes Это не векторы STL, а некоторые сторонние векторные объекты. Язык не похож на C. То, что они используют, примерно эквивалентно 'struct vector {float x, y , z;}; 'И это POD, поэтому не стесняйтесь бросать его в вызовы Objective-C. – zneak

4

как насчет:

struct Vector { float r, x, y, z; }; 
typedef struct Vector Vector; 

CG_INLINE Vector 
VectorMake(CGFloat x, CGFloat y, CGFloat z) 
{ 
    Vector vector; vector.x = x; vector.y = y; vector.z = z;return vector; 
} 
+0

Вектор в C++ std library - это тип массива, а не математическая точка в пространстве, как вы думаете. – phreakhead