Я хочу сделать это:
typedef struct
{
CGPoint vertices[];
NSUInteger vertexCount;
} Polygon;
Но там написано Field has incomplete type CGPoint []
.
Я хочу сделать это:
typedef struct
{
CGPoint vertices[];
NSUInteger vertexCount;
} Polygon;
Но там написано Field has incomplete type CGPoint []
.
Вам нужно сделать одну из двух вещей:
malloc
и free
массив по мере необходимости.Лучше не использовать struct
, а вместо этого создать полный класс. Затем вы можете добавить методы и свойства, а также значительно упростить управление памятью. Вы работаете в Objective-C. Воспользуйтесь преимуществами объектно-ориентированных аспектов языка. Добавьте метод для вычисления окружности, площади и т. д. Поместите логику туда, где она должна быть.
struct
.
- person rmaddy; 29.10.2013
struct
. Если вы пишете какую-либо функцию или метод в своем struct
, то это может быть и в классе Polygon
. Вы должны иметь некоторую логику, используя struct
. Поместите логику туда, где она принадлежит - в классе. В любом случае, наслаждайтесь.
- person rmaddy; 29.10.2013
Установить размер массива CGPoint vertices[count];
Разве вам не нужно уникальное имя для каждого элемента вашей структуры? Если вам просто нужна группа CGPoint в числовом порядке, с возможностью подсчета их количества, вам будет гораздо лучше, если вы поместите их в NSArray или NSMutableArray (хранится как NSValue, конечно)
Весь смысл структуры в том, чтобы иметь легкий доступ к значениям с помощью описательного имени, т.е.:
typedef struct {
CGPoint helpfulAndDescriptiveNameOne;
CGPoint helpfulAndDescriptiveNameTwoWhichIsDifferentThanTheOtherName;
etc...
NSUInteger vertexCount;
}
Например, CGRect — это просто структура, состоящая из четырех разных CGFloat, каждый из которых имеет описательное и полезное имя:
typedef {
CGFloat x;
CGFloat y;
CGFloat width;
CGFloat height;
} CGRect;