Динамический размерный массив указателей на класс - PullRequest
0 голосов
/ 26 февраля 2012

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

Этомой код, который не работает: scanf("%d %d",&n,&q);<br> Tree *pointers = new Tree[n];<br> pointers[0]->value = NULL;

Ответы [ 3 ]

5 голосов
/ 26 февраля 2012

Не используйте scanf, никогда.В C ++ используйте динамические контейнеры и iostreams:

#include <iostreams>
#include <vector>

int main()
{
  unsigned int n;
  int q;

  if (!(std::cin >> n >> q)) { /* error! */ }

  std::vector<Tree> forest(n);

  // ...
}

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

0 голосов
/ 26 февраля 2012

если указатель объявлен, синтаксис: «* указатель» представляет ячейку памяти. «Указатель» представляет указатель на ячейку памяти.

Следовательно, Tree *pointers = new Tree[n]; ключевое слово new возвращает указатель на область памяти, которую нельзя назначить.

Я надеюсь, что это решит проблему:

    Tree *pointers;

    pointers = new Tree[n];
0 голосов
/ 26 февраля 2012

Я предполагаю, что вы спрашиваете о C++.

Ваш код не будет работать.

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

Tree *pointers =new Tree[n];

Не забудьтедо delete [] pointers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...