Agregar objeto a la matriz de objetos en C ++

Hay una matriz de objetos y, para agregar un objeto, bash lo siguiente:

Shape ShapeList[30]; void addShape(Shape s) { for(int i=0; i<30;i++) { if(ShapeList[i] != '\0') { i++;} else { ShapeList[i]=s; numShapes++; break; } } } 

numShapes es una variable entera, Shape es la clase y ShapeList es la matriz de objetos . Pero el comstackdor da un error de esta manera que el operador != No está permitido. Entonces, ¿cómo puedo implementar esto?

Creo que necesitas cambiar tu statement de ‘contenedor’:

 Shape *ShapeList[30]; void addShape(Shape *s) { for(int i=0; i<30;i++) { if(ShapeList[i]) { i++;} else { ShapeList[i]=s; numShapes++; break; } } } 

y llamar a addShape de esta manera:

 addShape(new Shape()); 

ShapeList[i] devuelve un objeto de tipo Shape . En ese caso, puede sobrecargar el operator != (char) .

 class Shape { //your implementation // public: bool operator != (char x) const { // comparison logic } }; 

Además, creo que tienes un error aquí:

 if(ShapeList[i] != '\0') { i++;} 

Supongo que desea omitir este caso, pero ya ha incrementado i en el bucle for . Probablemente quieras:

 if(ShapeList[i] != '\0') { continue;} 

Como otros lo han señalado, debes usar un std::vector lugar de una matriz en bruto. Inicialmente asumí que ShapeList era una envoltura sobre un contenedor ShapeList .

 Shape * ShapeList[30]; numShapes=0; void addShape(Shape* s) { if( i>=30) return; ShapeList[numShapes++]=s; // provided you need to insert at end } 

No puedes usar \0 porque es una matriz, no una cadena.

almacenar todo el objeto como tal es una sobrecarga con memoria. los punteros son una mejor opción a menos que tenga variables locales que salgan de los problemas de scope. y si STL y Vectores no están fuera del scope del proyecto en el que se encuentra, intente usarlo. en el que puedes usar pushback () o pushfront ()

No especificó cómo se declara ShapeList .

Con el operador! = Lo compara con el carácter NUL, mientras que 4 líneas debajo de usted le asigna un objeto Shape.

Lo que creo que estás intentando lograr es encontrar una ranura vacía en la matriz de punteros a Forma, y ​​almacenar la Forma allí.

Pero, probablemente, es mejor usar ya sea std :: vector o std :: list, y push_back su forma.

Otra cosa que debe preguntarse: ¿quiero almacenar copias de mi objeto de Forma o punteros?

A menos que tenga un operador de conversión en la clase Shape para convertirlo en un carácter, o un operador de comparación no igual que tome un carácter como argumento, no puede comparar un objeto Shape con un char como lo hace.

Debería usar un std::vector o std::array y usar la función miembro para ver si existe una entrada o no.