Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: anonimo12121 en 25 Julio 2012, 11:10 am



Título: Problema con argumentos por defectos en funciones.
Publicado por: anonimo12121 en 25 Julio 2012, 11:10 am
buenas a todos tengo un lío tremendo con los argumentos por defectos de las funciones, no se sí lo estoy haciendo bien o no...
No debería de coger los valores por defecto al invocarlo como lo estoy haciendo en el main? no invoca al constructor que he declarado.

main.cpp
Código
  1. #include <iostream>
  2. using namespace std;
  3. #include "game.hpp"
  4. int main(int argc,char *argv[]){
  5.    Game g();
  6.    return 0;
  7.  
  8. }
game.cpp
Código
  1. #include "game.hpp"
  2. Game::Game(int w=640,int h=480,char *t="hola"){
  3.    myWindow = new sf::RenderWindow;
  4.    myNameWindow = new char;
  5.    //GameMap *m1 = new GameMap;
  6.    myWindow->create(sf::VideoMode(640,480,32),t);
  7.  
  8.    while(1){
  9.        myWindow->display();
  10.    }
  11. }
game.hpp
Código
  1. #include <iostream>
  2. #include <SFML/Graphics.hpp>
  3. #include <SFML/System.hpp>
  4. #include "gamemap.hpp"
  5. using namespace std;
  6. class Game {
  7.    public:
  8.        Game(int,int,char *);
  9.    private:
  10.        sf::RenderWindow *myWindow;
  11.        char *myNameWindow;
  12.  
  13. };


Título: Re: Problema con argumentos por defectos en funciones.
Publicado por: overxfl0w13 en 25 Julio 2012, 11:55 am
Xafi, el valor de los parámetros por defecto que se le pasan a una función, se tienen que declarar en el prototipo de la misma, en tu caso no lo sé seguro porque en la declaración de la clase no se pueden establecer valores pero puedes probar así.
Código
  1. //MAIN CPP
  2. #include <iostream>
  3. using namespace std;
  4. #include "game.hpp"
  5. int main(int argc,char *argv[]){
  6.    Game g();
  7.    return 0;
  8.  
  9. }
  10.  
  11. //GAME CPP
  12.  
  13. #include "game.hpp"
  14. Game::Game(int w,int h, char *t){
  15.    myWindow = new sf::RenderWindow;
  16.    myNameWindow = new char;
  17.    //GameMap *m1 = new GameMap;
  18.    myWindow->create(sf::VideoMode(640,480,32),t);
  19.  
  20.    while(1){
  21.        myWindow->display();
  22.    }
  23. }
  24.  
  25. // GAME HPP
  26.  
  27. #include <iostream>
  28. #include <SFML/Graphics.hpp>
  29. #include <SFML/System.hpp>
  30. #include "gamemap.hpp"
  31. using namespace std;
  32. class Game {
  33.    public:
  34.        Game(int w =640,int h=480,char *t="hola");
  35.    private:
  36.        sf::RenderWindow *myWindow;
  37.        char *myNameWindow;
  38.  
  39. };

Un ejemplo con un code simple para aclarar es así:

Código
  1. #include <iostream>
  2. using namespace std;
  3. void argumentos(int w=200,int o=300,int v=400);
  4.  
  5. int main(int argc,char *argv[])
  6. {
  7.    int x=20,y=40;
  8.    argumentos();
  9.    argumentos(x,y);
  10.    argumentos(x);
  11. }
  12.  
  13. void argumentos(int w,int o,int v)
  14. {
  15.    cout <<"Los argumentos pasados tienen como valor: " << w << " " << o << " " << v << endl;
  16. }
  17.  

Puedes pasarle los valores que quieras a la función teniendo en cuenta que siempre tienen prioridad los valores que le pases como parámetros sobre los definidos por defecto. Y acuérdate también de que no puedes establecer valores por defecto si el que está a la derecha no tiene ninguno asignado, es decir si pasas 3 parámetros solo podrá estar definido el segundo valor por defecto si el 3 también es por defecto, y el primero, cuando el segundo y el tercero son por defecto.


Título: Re: Problema con argumentos por defectos en funciones.
Publicado por: anonimo12121 en 25 Julio 2012, 12:58 pm
OK, gracias, hice lo siguiente.
main.cpp
Código
  1. #include <iostream>
  2. using namespace std;
  3. #include "game.hpp"
  4. int main(int argc,char *argv[]){
  5.    Game g(640,480,"Team D source enginer");
  6.    return 0;
  7.  
  8. }
  9.  
game.cpp
Código
  1. #include "game.hpp"
  2. Game::Game(int w,int h,char *t){
  3.    myWindow = new sf::RenderWindow;
  4.    myNameWindow = new char;
  5.    GameMap *m1 = new GameMap;
  6.    myNameWindow=t;
  7.    cout << t;
  8.    myWindow->create(sf::VideoMode(w,h,32),t);
  9.  
  10.    while(1){
  11.        myWindow->display();
  12.    }
  13. }
game.hpp
Código
  1. #include <iostream>
  2. #include <SFML/Graphics.hpp>
  3. #include <SFML/System.hpp>
  4. #include "gamemap.hpp"
  5. using namespace std;
  6. class Game {
  7.    public:
  8.        Game(int w,int h,char *t="Window test");
  9.    private:
  10.        sf::RenderWindow *myWindow;
  11.        char *myNameWindow;
  12.  
  13. };
  14.  


Título: Re: Problema con argumentos por defectos en funciones.
Publicado por: overxfl0w13 en 25 Julio 2012, 14:18 pm
OK, gracias, hice lo siguiente.
main.cpp
Código
  1. #include <iostream>
  2. using namespace std;
  3. #include "game.hpp"
  4. int main(int argc,char *argv[]){
  5.    Game g(640,480,"Team D source enginer");
  6.    return 0;
  7.  
  8. }
  9.  
game.cpp
Código
  1. #include "game.hpp"
  2. Game::Game(int w,int h,char *t){
  3.    myWindow = new sf::RenderWindow;
  4.    myNameWindow = new char;
  5.    GameMap *m1 = new GameMap;
  6.    myNameWindow=t;
  7.    cout << t;
  8.    myWindow->create(sf::VideoMode(w,h,32),t);
  9.  
  10.    while(1){
  11.        myWindow->display();
  12.    }
  13. }
game.hpp
Código
  1. #include <iostream>
  2. #include <SFML/Graphics.hpp>
  3. #include <SFML/System.hpp>
  4. #include "gamemap.hpp"
  5. using namespace std;
  6. class Game {
  7.    public:
  8.        Game(int w,int h,char *t="Window test");
  9.    private:
  10.        sf::RenderWindow *myWindow;
  11.        char *myNameWindow;
  12.  
  13. };
  14.  

Me alegro de que te haya funcionado! Team D Source powa  ;) jaja