2012-05-03 2 views
0

Привет, ребята, я новичок в C++ и до проекта, который у меня есть в университете, у меня есть трудные времена. Более подробно: Я создал код для списков и очередей (списки name = Chain, Queues name = Queue, Product - это структура, которая имеет базовые поля цепей). [Btw я использовал книгу Саниса (структуры данных), если кто ее знает. Я застрял здесь:Array of Objects Initialization (C++)

int k=4; 
Queue<Chain<Product>*>* x = new Queue<Chain<Product>*> [k]; 
for(int i=1;i<k;i++) 
{ 
    x[i] = new Queue<Chain<Product>*> [i+1]; 
} 

на петле он выдает мне ошибку: Invalid преобразования из очереди *> * в целом

Любой идею?

+3

Массивы начинаются с 0, а не 1. – chris

+1

Избавьтесь от '[i + 1]'. – ildjarn

+0

Использование вектора (или даже обычного массива) вместо массива указателей тоже поможет. – chris

ответ

2

Это должно быть

for(int i=0;i<k;i++) // first index is 0 
{ 
    x[i] = Queue<Chain<Product>*>(); 
} 

потому

Queue<Chain<Product>*>* x = new Queue<Chain<Product>*> [k]; 

создает массив Queue<Chain<Product>*> объектов, а не указателей.

Или, если вы хотите 2-D массив, вы используете:

Queue<Chain<Product>*>** x = new Queue<Chain<Product>*> * [k]; 
for(int 0=1;i<k;i++) 
{ 
    x[i] = new Queue<Chain<Product>*> [i+1]; 
} 

Для упрощения, вы в основном пытаются следующее:

int* x = new int[4]; 
for (int i = 0 ; i < 4 ; i++) 
    x[i] = new int[i]; 

, который, очевидно, неправильно.

+0

Btw, я не помню, если это выполнимо в C++ (я работаю в основном на C# и Java), но не может Queue *> иметь статическую функцию '.operator [int x]'? Это, очевидно, не так, а просто спрашивает. –

+0

@Shingetsu да, можно перегрузить операторы, но я не вижу смысла иметь 'static'' operator []'. –

+0

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

1

В строке x[i] = new Queue<Chain<Product>*> [i+1] он [i + 1] ошибочен.
Почему? Ну, вы создаете новое ключевое слово new. и .operator[int x] используется в массивах. В этой строке вы говорите, что это должен быть новый массив размером i + 1 типа Queue<Chain<Product>*>, который неисправен. Вместо того, чтобы использовать x[i] = Queue<Chain<Product>*>();

Так заканчиваются коды:

for(int i=0;i<k;i++)//because indexes begin at 0, not 1. 
{ 
    x[i] = Queue<Chain<Product>*>() 
} 

Примечание *, чтобы увидеть упрощенную версию вашей ошибки см пост другого парня (я не буду копировать код вокруг - отходы пространства).

+0

Благодарим за помощь. когда я запускаю его, он очень усложняется, однако окна появляются ошибка, когда я запускаю его, что говорит, что filename.exe остановил exececuting. Без цикла for он выводит то же самое, что означает, что я все еще не имею доступного пространства для своего массива. Просто с моим старым идентификатором кода didnt компилировать причину, у меня было несколько ошибок, но если у меня не было цикла for, результат будет тем же самым с вашим кодом –

+0

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

+0

Да, я буду публиковать завтра, но имейте в виду, что мой код компилируется и работает нормально без инициализации, и когда я добавляю этот код, всплывающее сообщение . Я буду создавать полную тему завтра спасибо за помощь! –