Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Palante en 12 Febrero 2017, 16:52 pm



Título: Constructores C++
Publicado por: Palante en 12 Febrero 2017, 16:52 pm
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
  1. //Constructores
  2.  
  3. #include<iostream>
  4.  
  5. using namespace std;
  6.  
  7. class Persona {
  8.  
  9. private:
  10.  
  11. string Nombre;
  12.  
  13.  
  14. public:
  15.  
  16. Persona () {
  17.  
  18. Nombre = "Sin Nombre";
  19. }
  20.  
  21. Persona (string_Nombre) {
  22.  
  23. Nombre =_Nombre;
  24. }
  25. string Getnombre () {
  26.  
  27. return Nombre;}
  28.  
  29. };
  30.  
  31. int main (void) {
  32.  
  33. Persona Mipersona ("Alex"),  Otrapersona ("Sergio");
  34.  
  35. Persona Sinpersona;
  36.  
  37. cout<<Mipersona.GetNombre();
  38.  
  39. cout<<endl;
  40.  
  41. cout<<Otrapersona.Getnombre();
  42. cout<<endl;
  43. cout<<Sinpersona.Getnombre();
  44. cout<<endl;
  45.  
  46. }
  47.  
  48.  

Estos son los errores:

Código:
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


Título: Re: Constructores C++
Publicado por: engel lex en 12 Febrero 2017, 18:26 pm
Código:
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
  1. Persona (string_Nombre) {

string_Nombre no tiene tipo, creo que quisiste decir

Código
  1. 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


Título: Re: Constructores C++
Publicado por: Palante en 12 Febrero 2017, 19:30 pm
efectivamente, ahora solo me sale un error, pero veo mi función  main y no veo error:

Código:
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


Título: Re: Constructores C++
Publicado por: engel lex en 12 Febrero 2017, 19:41 pm
que error ? recuerda como es esto... copy paste siempre de los errores


Título: Re: Constructores C++
Publicado por: JS3 en 14 Febrero 2017, 02:10 am
Hola estas declarando mal, trata con esto

Código
  1. Persona miPersona = new Persona("Alex");
  2. Persona otraPersona = new Persona("Sergio");
  3.  


Título: Re: Constructores C++
Publicado por: class_OpenGL en 14 Febrero 2017, 08:59 am
Hola estas declarando mal, trata con esto

Código
  1. Persona miPersona = new Persona("Alex");
  2. Persona otraPersona = new Persona("Sergio");
  3.  

Eso es en Java.

Código
  1. cout<<Mipersona.GetNombre();

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


Título: Re: Constructores C++
Publicado por: dato000 en 14 Febrero 2017, 14:17 pm
Hola estas declarando mal, trata con esto

Código
  1. Persona miPersona = new Persona("Alex");
  2. Persona otraPersona = new Persona("Sergio");
  3.  

Eso es en Java.

Código
  1. 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#.


Título: Re: Constructores C++
Publicado por: class_OpenGL en 14 Febrero 2017, 15:24 pm
Si, pero new retorna puntero a obtejo, y ahi no se estan declarando punteros