• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы 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

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

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