Matriz de inicialización de objetos (C++)

Hola chicos, soy nuevo en C ++ y, gracias a un proyecto que tengo en la universidad, estoy pasando por momentos difíciles. Más específicamente: he creado un código para listas y colas (nombre de listas = cadena, nombre de colas = cola, producto es una estructura que tiene básicamente campos de cadenas) [por cierto, he usado el libro Sahnis (estructuras de datos) si alguien lo sabe. Estoy atrapado aquí:

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];
}

en el ciclo me arroja un error: Conversión no válida de Queue*>* a int

¿Alguna idea?

preguntado el 03 de mayo de 12 a las 21:05

Usar un vector (o incluso una matriz normal) en lugar de una matriz de punteros también ayudará. -

2 Respuestas

Debería ser

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

porque

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

crea una matriz de Queue<Chain<Product>*> objetos, no punteros.

O si quieres una matriz 2-d, usas:

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

Simplificar, básicamente estás intentando lo siguiente:

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

que obviamente está mal.

contestado el 03 de mayo de 12 a las 21:05

Por cierto, no recuerdo si es factible en C++ (trabajo en C# y Java principalmente) pero no puedo hacer cola *> tiene una función estática .operator[int x]? Obviamente no es el caso aquí, pero solo pregunto. - usuario1241335

@Shingetsu sí, es posible sobrecargar a los operadores, pero no veo el sentido de tener un static operator[]. - Luciano Grigore

Quiero decir, ¿es posible sobrecargar a un operador para que sea estático? Y si pudiera existir, podría usarse para recuperar una versión decodificada de la clase desde una determinada ubicación de archivo o similar, esos son detalles. - usuario1241335

@Shingetsu No creo que sea posible y, de nuevo, no tendría sentido. - Luciano Grigore

Ahora el código se compila, pero cuando lo ejecuto, aparece un mensaje que dice: filename.exe dejó de ejecutarse. ¡Tenga en cuenta que lo mismo estaba sucediendo sin el ciclo for! - Menelaos Kotsollaris

En la linea x[i] = new Queue<Chain<Product>*> [i+1] él [i+1] está equivocado.
¿Por qué? Bueno, estás creando un nuevo objeto. new palabra clave. y .operator[int x] se utiliza en matrices. En esa línea está diciendo que debería ser una nueva matriz de tamaño i + 1 de tipo Queue<Chain<Product>*> que es defectuoso. En su lugar, use x[i] = Queue<Chain<Product>*>();

Entonces el código final es:

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

Nota * para ver una versión simplificada de su error, vea la publicación de otro tipo (no copiaré el código, desperdicia espacio).

contestado el 03 de mayo de 12 a las 21:05

Gracias por tu ayuda . cuando lo ejecuto, se compila perfectamente, sin embargo, Windows muestra un error cuando lo ejecuto que dice que filename.exe dejó de ejecutarse. Sin el bucle for aparece lo mismo, lo que significa que todavía no he guardado espacio para mi matriz. Simplemente con mi ID de código anterior no se compiló porque tuve varios errores, pero si no tuviera el ciclo for, el resultado es el mismo con su código: Menelaos Kotsollaris

@ Tryme_34 no está vinculado con esto. Dejar de ejecutarse no siempre significa quedarse sin memoria, supongo que es un error más adelante en el código. Publique una nueva pregunta con la fuente completa. - usuario1241335

sí, lo publicaré mañana, pero tenga en cuenta que mi código se compila y funciona bien sin la inicialización y cuando agrego este código, aparece el mensaje emergente. Crearé un tema completo mañana, ¡gracias por la ayuda! - Menelaos Kotsollaris

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.