2012-04-11 2 views
0

Я работаю над программой и должен создать массив объектов, в частности у меня есть массив 31x1, где каждая позиция является объектом (каждый объект в основном построен из 6 ints). Вот что я имею, но что-то не так, и я мог бы помочь вам.Конструктор/Деструктор с участием класса и структуры

31x1 структура заголовок»

const int days=31; 

struct Arr{ 

    int days; 
    int *M; 
}; 
typedef Arr* Array; 

31x1 матричный конструктор:

void constr(){ 
    int *M; 
    M = new Expe[31]; // Expe is the class 

класса заголовок:

class Expe { 
private: 
    //0-HouseKeeping, 1-Food, 2-Transport, 3-Clothing, 4-TelNet, 5-others 
    int *obj; 
} 

объект класса конструктор:

Expe::Expe() { 
    this->obj=new int[6]; 
} 

помогите пожалуйста ... потому что я очень потерян.

+3

«что-то не так» не очень описательно. Можете ли вы предоставить дополнительную информацию - полную короткую программу, которую вы тестируете, что вы ожидаете, что на самом деле происходит ...? – DCoder

+0

A 31x1 массив? Ты уверен? –

+0

teh way я строю его iswnt worig все читается ... и его одномерный арай, и я могу tuse vector.h ... это моя домашняя работа .. и мне нужно перейти от модульного программирования к объектно ориентированному –

ответ

3

Вы не должны использовать new, если вам не нужно. Вы динамически выделяете память, которую вы должны вручную удалить после этого.

Вместо этого используйте статически выделенные массивы:

struct Arr{ 
    int days; 
    Expe M[31]; 
} 

Таким образом, вам не нужно построить М, то он автоматически заполняется 31 объектов EXPE. То же самое касается массива int в Expe.

(Подсказка: Структуры и классы почти идентичны Они лишь разница, что видимость по умолчанию для структур является открытой Кроме того, структуры могут иметь функции-членов и конструктор, как и классы делают...)

Если у вас есть использовать динамическое выделение вы должны следовать этому обозначения:

X* variableName = new X[size]; 
... 
delete[] variableName; //Be sure to get rid of unused memory afterwards. 

указатели должны быть только типа int*, если вы хотите хранить массив целых чисел в нем.

Вы также можете использовать const int s для объявлений размера массива. Так что это действительно:

const int size = 5; 
int X[size]; 

Вы можете использовать это, чтобы избавиться от «магических чисел» в вашем коде.

Typedefs, как typedef Arr* Array;, обычно используются в C, а не на C++. Вряд ли есть какая-то ситуация, когда вам нужно будет напечатать что-то вроде этого.

Если вы разместите весь свой код, мы можем предоставить лучшую помощь. Кажется, что у вас есть не только одна или две ошибки в вашем коде, но и некоторое фундаментальное понимание.

+0

спасибо, но я должен использовать динамический метод ... и, скажем, я пока не получил его еще очень хорошо. хорошо, я посмотрю, смогу ли я исправить это, я опубликую код, спасибо большое –

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