Error a tratar de crear un array para tipos de una Clase propia

Hola Buenos Dias a todos.

Quiero asignar un nuevo tipo de dato de un array, por ejemplo :

Quiero que mi Array sea de tipo Persona, pero me lanza un error, lo he intentado de distintas formas. ¿No se si esto se pueda realizar?

Una de la formas empleadas:

#include
#include

using namespace std;

class Gente
{
private:

public:

string Nombre;

};

int main()
{

Gente[] array = new Gente[2];
array[0].Nombre=”Juan”;
array[1].Nombre=”Pedro”;

system(“PAUSE”);

}

Error:

=================

  

 

Byron, recuerda evitar el uso de palabras reservadas para nombrar variables, por ejemplo: Gente[] array , donde “array” es una palabra reservada, podrías usar por ejemplo Gente[] gente.
– Elenasys
el 20 abr. a las 17:20

=================

2 respuestas
2

=================

No tienes un método para acceder a la propiedad de nombre de tu clase Gente, tanto para inicializarla como para obtenerla, Tienes que crear tu clase de esta forma:

class Gente {
string nombre;

public:
string getNombre()
{ return nombre; }
void setNombre(string s){
nombre = s;
}
};

dentro de main() inicializas :

Gente gente[4];
gente[0].setNombre(“Juan”);
gente[1].setNombre(“Pedro”);
gente[2].setNombre(“Himi”);
gente[3].setNombre(“Korina”);

Inicializado tu array puedes leer los valores

cout << "gente:" << gente[i].getNombre() << "\n"; Este es un ejemplo completo: #include
using namespace std;

class Gente {
int x;
string nombre;

public:
string getNombre()
{ return nombre; }
void setNombre(string s){
nombre = s;
}
};

int main()
{
Gente gente[4];
gente[0].setNombre(“Juan”);
gente[1].setNombre(“Pedro”);
gente[2].setNombre(“Himi”);
gente[3].setNombre(“Korina”);

for(int i=0; i < 4; i++){ cout << "nombre: " << gente[i].getNombre() << "\n"; } return 0; } La declaración del array estaría bien si estuvieses en C#. En C++ se hace de forma ligeramente diferente: Gente* array = new Gente[2]; Si, en cambio, quisieses declarar el array en la pila, sin usar memoria dinámica y ahorrándote el posterior delete (que por cierto no has incluido), podrías hacer algo tal que: Gente array[2]; Por otro lado, en C++ existen contenedores que simplifican la gestión de arreglos y de memoria dinámica. En el caso de vectores de tamaño fijo y predefinido podemos usar std::array std::array miArray;

La ventaja de usar contenedores es que tenemos a nuestra disposición una serie de mecanismos estándar para trabajar con los elementos, como por ejemplo recorrer la lista de elementos usando iteradores.

Un saludo.

  

 

@ByronRamirez La respuesta de eferion es lo que buscas y mucho mas, pero creo por tu pregunta (igual me equivoco disculpa si eso) que te puede sonar un poco a chino, no te quedes con que funciona y ya esta, si tienes alguna duda sobre lo que se menciona en esta respuesta sobre que new devuelve un puntero que esta en el Heap ect, te recomiendo que busques informacion sobre esto. te dejo un video que igual te ayuda youtube.com/… aparte el autor de esto videos tiene muy buen contenido sobre c++ que te pueden ayudar.
– Angel Angel
el 20 abr. a las 17:23

1

 

pd: si la respuesta soluciona tu problema considera el acceptar y/o upvote puedes entender el por que aqui -> es.stackoverflow.com/tour. Saludos
– Angel Angel
el 20 abr. a las 17:23

  

 

Gracias por responder 🙂 Y como podria obtener el tamaño de este arreglo Gente *arrayP = new Gente[10]; osea el tamaño de arrayP ?
– Byron Ramirez
el 22 abr. a las 22:40

  

 

no puedes. el puntero no almacena esa información por lo que has de guardarla tu de forma explícita en otra variable… por eso te comenté lo de los contenedores de C++
– eferion
el 22 abr. a las 23:25