Constructores C++

Iniciado por Palante, 12 Febrero 2017, 16:52 PM

0 Miembros y 1 Visitante están viendo este tema.

Palante

Hola, estaba practicando con constructores en C++, y no me acaba de compilar  este ejercicio en C++, me salen muchos errores, y soy muy malo  interpretando los mensajes del compilador, me vendrían muy bien vuestros consejos

;D ;D

este es el código:

Código (cpp) [Seleccionar]
//Constructores

#include<iostream>

using namespace std;

class Persona {

private:

string Nombre;


public:

Persona () {

Nombre = "Sin Nombre";
}

Persona (string_Nombre) {

Nombre =_Nombre;
}
string Getnombre () {

return Nombre;}

};

int main (void) {

Persona Mipersona ("Alex"),  Otrapersona ("Sergio");

Persona Sinpersona;

cout<<Mipersona.GetNombre();

cout<<endl;

cout<<Otrapersona.Getnombre();
cout<<endl;
cout<<Sinpersona.Getnombre();
cout<<endl;

}



Estos son los errores:

lagrima.cpp:25:1: error: field 'string_Nombre' has incomplete type 'Persona'
}
^
lagrima.cpp:8:7: note: definition of 'class Persona' is not complete until the closing brace
class Persona {
      ^
lagrima.cpp:25:1: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11
}
^
lagrima.cpp:25:1: error: expected ';' at end of member declaration
lagrima.cpp:30:1: error: expected ';' after class definition
}
^
lagrima.cpp: In function 'int main()':
lagrima.cpp:34:26: error: no matching function for call to 'Persona::Persona(const char [5])'
Persona Mipersona ("Alex"),  Otrapersona ("Sergio");
                         ^
lagrima.cpp:17:1: note: candidate: Persona::Persona()
Persona () {
^
lagrima.cpp:17:1: note:   candidate expects 0 arguments, 1 provided
lagrima.cpp:8:7: note: candidate: Persona::Persona(const Persona&)
class Persona {
      ^
lagrima.cpp:8:7: note:   no known conversion for argument 1 from 'const char [5]' to 'const Persona&'
lagrima.cpp:34:51: error: no matching function for call to 'Persona::Persona(const char [7])'
Persona Mipersona ("Alex"),  Otrapersona ("Sergio");
                                                  ^
lagrima.cpp:17:1: note: candidate: Persona::Persona()
Persona () {
^
lagrima.cpp:17:1: note:   candidate expects 0 arguments, 1 provided
lagrima.cpp:8:7: note: candidate: Persona::Persona(const Persona&)
class Persona {
      ^
lagrima.cpp:8:7: note:   no known conversion for argument 1 from 'const char [7]' to 'const Persona&'
lagrima.cpp:38:17: error: 'class Persona' has no member named 'GetNombre'
cout<<Mipersona.GetNombre();
                ^

agradezco vuestra ayuda,muchas gracias

engel lex

error: field 'string_Nombre' has incomplete type
error: no matching function for call to 'Persona::Persona(const char [5])
no known conversion for argument 1 from 'const char [5]' to 'const Persona&'


Código (cpp) [Seleccionar]
Persona (string_Nombre) {

string_Nombre no tiene tipo, creo que quisiste decir

Código (cpp) [Seleccionar]
Persona (string _Nombre) {

eso resuelve casi todo los problemas, ya que si la variable no tiene tipo, se considera del tipo de la clase

el otro error te lo dejo, es facil de ver
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Palante

efectivamente, ahora solo me sale un error, pero veo mi función  main y no veo error:

int main (void) {

Persona Mipersona ("Alex"),  Otrapersona ("Sergio");

Persona Sinpersona;

cout<<Mipersona.GetNombre();

cout<<endl;

cout<<Otrapersona.Getnombre();
cout<<endl;
cout<<Sinpersona.Getnombre();
cout<<endl;

}


no veo error ahí ;D

Gracias

engel lex

que error ? recuerda como es esto... copy paste siempre de los errores
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

JS3

Hola estas declarando mal, trata con esto

Código (cpp) [Seleccionar]

Persona miPersona = new Persona("Alex");
Persona otraPersona = new Persona("Sergio");

class_OpenGL

Cita de: JS3 en 14 Febrero 2017, 02:10 AM
Hola estas declarando mal, trata con esto

Código (cpp) [Seleccionar]

Persona miPersona = new Persona("Alex");
Persona otraPersona = new Persona("Sergio");


Eso es en Java.

Código (c++) [Seleccionar]
cout<<Mipersona.GetNombre();

El método es Getnombre, sin mayúscula en la N

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

dato000

Cita de: class_OpenGL en 14 Febrero 2017, 08:59 AM
Cita de: JS3 en 14 Febrero 2017, 02:10 AM
Hola estas declarando mal, trata con esto

Código (cpp) [Seleccionar]

Persona miPersona = new Persona("Alex");
Persona otraPersona = new Persona("Sergio");


Eso es en Java.

Código (c++) [Seleccionar]
cout<<Mipersona.GetNombre();

El método es Getnombre, sin mayúscula en la N


En c++ también puede usarse el operador new, de hecho, fue en c++ donde se empezo a usar ese tipo de declaración, aunque es relativamente diferente al que se usa en java y c#.



class_OpenGL

Si, pero new retorna puntero a obtejo, y ahi no se estan declarando punteros

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL