2015-07-13 2 views
2

Я попытался сделать это, но получил ошибку в конструкторе.Как я могу объявить поле объекта массива в Delphi?

E2029 'OF' ожидалось, но '[' найдено

Dish = class 
public 
    Dish_name: string;   
    Dish_id: integer;   
    Dish_number: integer;  
    Dish_units: string;   
    Dish_price: integer;  
    Dish_prime_cost: integer; 
    Dish_ingredients_id: array[1..100] of Ingredients; 

constructor Create(NewDish_name: string; 
    NewDish_id: integer; NewDish_number: integer; 
    NewDish_units: string; NewDish_price: integer; 
    NewDish_prime_cost: integer; 
    NewDish_ingredients_id:array[1..100] of Ingredients); 

    destructor Destroy; 
end; 

Ингредиенты это класс.

ответ

3

Вы не можете объявить статический массив inline в качестве параметра. Вам необходимо указать тип:

type 
    TIngredientsArray = array[1..100] of Ingredients; 

И затем используйте этот тип как для своего поля, так и для вашего аргумента.

Однако массив с статическим размером, вероятно, не самый лучший выбор. Что делать, если вам нужно более 100 ингредиентов? Что делать, если вам нужно всего 1, но они вынуждены пройти около 100? Как ваш код стоит, как класс блюда знает, сколько ингредиентов действительно было предоставлено?

Рассмотрите возможность использования динамического массива.

Вы также должны подумать о жизни и владении этими ингредиентами. Вы передаете объекты классу блюд. Получает ли он право собственности? То есть, кто несет ответственность за уничтожение всех объектов ингредиентов? Если вы можете использовать тип значения для ингредиентов, то есть record, то вы можете обнаружить, что упрощает управление жизненным циклом.

Идиоматично использовать индексирование с нулевым индексом для массивов в Delphi. Динамические массивы основаны на нуле. Стандартные классы коллекций основаны на нуле. Если вы начнете использовать массивы на основе одного, тогда опыт говорит, что вы собираетесь сохранить путаницу в будущем.

+1

TObjectlist будет более подходящим, нет? – whosrdaddy

+0

@whosrdaddy Может быть, да, может быть, нет –

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