Problema con argumentos por defectos en funciones.

Iniciado por anonimo12121, 25 Julio 2012, 11:10 AM

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

anonimo12121

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 (cpp) [Seleccionar]
#include <iostream>
using namespace std;
#include "game.hpp"
int main(int argc,char *argv[]){
   Game g();
   return 0;

}

game.cpp
Código (cpp) [Seleccionar]
#include "game.hpp"
Game::Game(int w=640,int h=480,char *t="hola"){
   myWindow = new sf::RenderWindow;
   myNameWindow = new char;
   //GameMap *m1 = new GameMap;
   myWindow->create(sf::VideoMode(640,480,32),t);

   while(1){
       myWindow->display();
   }
}

game.hpp
Código (cpp) [Seleccionar]
#include <iostream>
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include "gamemap.hpp"
using namespace std;
class Game {
   public:
       Game(int,int,char *);
   private:
       sf::RenderWindow *myWindow;
       char *myNameWindow;

};
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746

overxfl0w13

#1
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 (cpp) [Seleccionar]

//MAIN CPP
#include <iostream>
using namespace std;
#include "game.hpp"
int main(int argc,char *argv[]){
    Game g();
    return 0;

}

//GAME CPP

#include "game.hpp"
Game::Game(int w,int h, char *t){
    myWindow = new sf::RenderWindow;
    myNameWindow = new char;
    //GameMap *m1 = new GameMap;
    myWindow->create(sf::VideoMode(640,480,32),t);

    while(1){
        myWindow->display();
    }
}

// GAME HPP

#include <iostream>
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include "gamemap.hpp"
using namespace std;
class Game {
    public:
        Game(int w =640,int h=480,char *t="hola");
    private:
        sf::RenderWindow *myWindow;
        char *myNameWindow;

};


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

Código (cpp) [Seleccionar]

#include <iostream>
using namespace std;
void argumentos(int w=200,int o=300,int v=400);

int main(int argc,char *argv[])
{
   int x=20,y=40;
   argumentos();
   argumentos(x,y);
   argumentos(x);
}

void argumentos(int w,int o,int v)
{
   cout <<"Los argumentos pasados tienen como valor: " << w << " " << o << " " << v << endl;
}


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.
[/url]

anonimo12121

OK, gracias, hice lo siguiente.
main.cpp
Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;
#include "game.hpp"
int main(int argc,char *argv[]){
    Game g(640,480,"Team D source enginer");
    return 0;

}

game.cpp
Código (cpp) [Seleccionar]
#include "game.hpp"
Game::Game(int w,int h,char *t){
    myWindow = new sf::RenderWindow;
    myNameWindow = new char;
    GameMap *m1 = new GameMap;
    myNameWindow=t;
    cout << t;
    myWindow->create(sf::VideoMode(w,h,32),t);

    while(1){
        myWindow->display();
    }
}

game.hpp
Código (cpp) [Seleccionar]
#include <iostream>
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include "gamemap.hpp"
using namespace std;
class Game {
    public:
        Game(int w,int h,char *t="Window test");
    private:
        sf::RenderWindow *myWindow;
        char *myNameWindow;

};
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746

overxfl0w13

Cita de: Xafi en 25 Julio 2012, 12:58 PM
OK, gracias, hice lo siguiente.
main.cpp
Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;
#include "game.hpp"
int main(int argc,char *argv[]){
    Game g(640,480,"Team D source enginer");
    return 0;

}

game.cpp
Código (cpp) [Seleccionar]
#include "game.hpp"
Game::Game(int w,int h,char *t){
    myWindow = new sf::RenderWindow;
    myNameWindow = new char;
    GameMap *m1 = new GameMap;
    myNameWindow=t;
    cout << t;
    myWindow->create(sf::VideoMode(w,h,32),t);

    while(1){
        myWindow->display();
    }
}

game.hpp
Código (cpp) [Seleccionar]
#include <iostream>
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include "gamemap.hpp"
using namespace std;
class Game {
    public:
        Game(int w,int h,char *t="Window test");
    private:
        sf::RenderWindow *myWindow;
        char *myNameWindow;

};


Me alegro de que te haya funcionado! Team D Source powa  ;) jaja
[/url]