Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2012, 19:51   #1
David Villa
Пользователь
 
Аватар для David Villa
 
Регистрация: 24.12.2011
Сообщений: 54
По умолчанию Массив классов

Здравствуйте.
У меня есть класс вершина:

Код:
class vertex {
public:
vertex();
vertex(int,int,int,TColor,int);
void draw(TPaintBox*);
int center_x;
int center_y;
int radius;
TColor color;
int number;
};
Появилась необходимость создать массив из 30 элементов данного класса, с дальнейшей возможностью изменять объекты.
Вот код который я написал для примера:

vertex* arr_ver[30];
arr_ver[0]->center_x=10;

Появляется "access violatoin...."
Подскажите, что изменить чтобы избежать этой ошибки и посоветуйте по-возможности еще какие-нибудь способы создания массива классов или его альтернативы.

Последний раз редактировалось Stilet; 02.05.2012 в 20:33.
David Villa вне форума Ответить с цитированием
Старый 02.05.2012, 20:10   #2
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Код:
vertex* arr_ver[30];
Это задание не массива объектов класса, а задание массива указателей на объекты.
Тогда либо так
Код:
vertex arr_ver[30];
либо
Код:
vertex* arr_ver[30];
for (int i = 30; i--;)
  arr_ver[i] = new vertex;
EUGY вне форума Ответить с цитированием
Старый 02.05.2012, 20:16   #3
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию

Мне не нравится эта строчка. Что ты создаешь таким образом?
vertex* arr_ver[30];
arr_ver[0]->center_x=10;

Попробуй создать одномерный массив, элементы которого объекты класса. Тебе надо создать столько объектов класса, сколько будет размерность массива. И надо забивать в каждый элемент массива объект. Ты этого не делаешь. Выражение "массив классов" некорректно, массив объектов класса(классов) так правильнее.
Желание тысяча возможностей, нежелание - тысяча причин
Стремящийся вне форума Ответить с цитированием
Старый 02.05.2012, 20:22   #4
David Villa
Пользователь
 
Аватар для David Villa
 
Регистрация: 24.12.2011
Сообщений: 54
По умолчанию

в обоих случаях появляется

[C++ Warning] Dialogs.hpp(437): W8058 Cannot create pre-compiled header: initialized data in header
[Linker Error] Unresolved external 'vertex::vertex()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\UN IT1.OBJ
David Villa вне форума Ответить с цитированием
Старый 02.05.2012, 20:26   #5
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию

Ошибка в конструкторе по умолчанию. Посмотри или вылоди посмотрим
Желание тысяча возможностей, нежелание - тысяча причин
Стремящийся вне форума Ответить с цитированием
Старый 02.05.2012, 20:26   #6
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
class vertex {
public:
vertex(); // это прототип конструктора по умолчанию
//.....
Где его реализация?
EUGY вне форума Ответить с цитированием
Старый 02.05.2012, 20:26   #7
David Villa
Пользователь
 
Аватар для David Villa
 
Регистрация: 24.12.2011
Сообщений: 54
По умолчанию

Цитата:
Сообщение от Стремящийся Посмотреть сообщение
Мне не нравится эта строчка. Что ты создаешь таким образом?
vertex* arr_ver[30];
arr_ver[0]->center_x=10;

Попробуй создать одномерный массив, элементы которого объекты класса. Тебе надо создать столько объектов класса, сколько будет размерность массива. И надо забивать в каждый элемент массива объект. Ты этого не делаешь. Выражение "массив классов" некорректно, массив объектов класса(классов) так правильнее.

Видимо мне серьезно не хватает знаний)

"И надо забивать в каждый элемент массива объект"
А как это сделать?

и вот эту фразу не до конца понял:
"Тебе надо создать столько объектов класса, сколько будет размерность массива"

Объясни, если можно, подробнее.

его реализация отсутствует. разве обязательна реализация конструктора по умолчанию?

Вот реализация второго конструктора:
Код:
vertex::vertex(int c_x, int c_y, int rad, TColor col, int num=1) {
center_x=c_x;
center_y=c_y;
radius=rad;
color=col;
number=num;
}

Последний раз редактировалось Stilet; 02.05.2012 в 20:34.
David Villa вне форума Ответить с цитированием
Старый 02.05.2012, 20:30   #8
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию

EUGY хорошо написал на первый :

Код:

vertex* arr_ver[30];
for (int i = 30; i--
arr_ver[i] = new vertex;

на второй:

vertex arr_ver[30];
Здесь уважаемый указывает размерность массива в 30 элементов, вот тебе и надо создавать 30 объектов класса: vertex v1... vertex v30. Первый вариант лучше.
Желание тысяча возможностей, нежелание - тысяча причин

Последний раз редактировалось Стремящийся; 02.05.2012 в 20:35. Причина: Додумал
Стремящийся вне форума Ответить с цитированием
Старый 02.05.2012, 20:31   #9
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
его реализация отсутствует. разве обязательна реализация конструктора по умолчанию?
Если она декларируется, то да.
Не нужна, тогда убирай прототип. Компиль подставит свою реализацию.
EUGY вне форума Ответить с цитированием
Старый 02.05.2012, 20:34   #10
David Villa
Пользователь
 
Аватар для David Villa
 
Регистрация: 24.12.2011
Сообщений: 54
По умолчанию

Цитата:
Сообщение от Стремящийся Посмотреть сообщение
EUGY хорошо написал на первый и на второй вопрос:

vertex* arr_ver[30];
for (int i = 30; i--
arr_ver[i] = new vertex;
в условии цикла где-то ошибка. может вот так: for (int i = 30;i; i--) ?

но и при этом появляется ошибка, и заключается она, как мне кажется, в конструкторе по умолчанию. Или нет?
David Villa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив из классов DeMoHoJIoG Паскаль, Turbo Pascal, PascalABC.NET 2 12.03.2012 18:19
Сохранить массив классов в файл Casper-SC Общие вопросы .NET 42 21.03.2010 09:27
Передать массив базового абстрактного класса функциям производных классов mishutka999 Общие вопросы C/C++ 2 01.12.2009 14:08
Создание классов и использование объектов классов при написании программ в среде C++. Frozen inside Помощь студентам 0 16.04.2009 23:18
Массив классов nns2009 Общие вопросы C/C++ 15 03.02.2009 00:47