• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

массивы классов

  • Автор темы nns2009
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

nns2009

У меня почему-то не создаётся массив классов, точнее создаётся, но не эксплуатируется. Я пытаюсь создать так:
Код:
[b]pastime** pases = new *pastime[2];
pases[0] = new pastime();
pases[1] = new pastime();[/b]
или так:
Код:
[b]pastime pases[2];
pases[0] = new pastime();
pases[1] = new pastime();[/b]
может я в классе что не так сделал, вот класс:
Код:
class pastime
{
public:
BYTE r;
BYTE g;
BYTE b;
char* name;
char* description;
pastime()
{
r = 255;
g = 255;
b = 255;
name = "Не назначено"; //new char[13];
description = "Не назначено"; //new char[13];
return;
}
pastime(byte r1, byte g1, byte b1, char* name1, char* description1)
{
r = r1;
g = g1;
b = b1;
name = new char[strlen(name1)+1];
strcpy(name, name1);
description = new char[strlen(description1)+1];
strcpy(description, description1);
return;
}
~pastime()
{
delete [] name;
delete [] description;
return;
}
};

сама строчка создания прекрасно работает ( pastime pases[2]; ),
но потом строчки вида: pases[0].r = 120; не работают, компилятор пишет что:
1) нельзя объявить массив размером 0
2) массив не может быть типа default-int
3) нельзя объявить два массива с одинаковым именем
хотя во второй строчке я лишь назначаю свойство r первого элемента массива равным 120.
 
D

Dimmuborgir

Код:
pastime** pases = new *pastime[2];
pases[0] = new pastime();
pases[1] = new pastime();

я не понял вы хотели создать двумерный или одномерный массив?
судя по указателю на указатель - двумерный. тогда создавать надо так:

Код:
pastime** pases = new pastime*[2];
for (int i=0;i<2;i++)
*(pases+i)=new pastime[2];

и обращаться к нему соответстенно:

Код:
passes[0][0].r;

если же одномерный то:

Код:
pastime* pases = new pastime[2];
 
N

nns2009

Ошибка выяснилась:
я обращался к массиву вне функций, а надо в функции,
теперь всё работает.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!