una procedimientos parametros llamar funciones funcion ejemplos dev con como codigos c++ sfml identifier

c++ - procedimientos - ¿Cómo llamar a una función encontrada en otro archivo?



funciones y procedimientos en c++ (3)

Hace poco empecé a recoger C ++ y la biblioteca SFML, y me preguntaba si había definido un Sprite en un archivo llamado apropiadamente "player.cpp". ¿Cómo lo llamaría en mi ciclo principal ubicado en "main.cpp"?

Aquí está mi código (¡Tenga en cuenta que esto es SFML 2.0, no 1.6!).

main.cpp

#include "stdafx.h" #include <SFML/Graphics.hpp> #include "player.cpp" int main() { sf::RenderWindow window(sf::VideoMode(800, 600), "Skylords - Alpha v1"); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } window.clear(); window.draw(); window.display(); } return 0; }

player.cpp

#include "stdafx.h" #include <SFML/Graphics.hpp> int playerSprite(){ sf::Texture Texture; if(!Texture.loadFromFile("player.png")){ return 1; } sf::Sprite Sprite; Sprite.setTexture(Texture); return 0; }

El lugar donde necesito ayuda está en el "main.cpp" donde dice window.draw (); en mi código de sorteo. En ese paréntesis, debería estar el nombre del Sprite que quiero cargar en la pantalla. Por lo que he buscado, y he intentado adivinar. No he logrado que la función de dibujo funcione con mi sprite en el otro archivo. Siento que me estoy perdiendo algo grande y muy obvio (en cualquiera de los archivos), pero nuevamente, todos los profesionales alguna vez fueron nuevos.


Pequeña adición a la respuesta de @ user995502 sobre cómo ejecutar el programa.

g++ player.cpp main.cpp -o main.out && ./main.out


Puede utilizar archivos de encabezado.

Buena práctica.

Puede crear un archivo llamado player.h declare todas las funciones que necesitan otros archivos cpp en ese archivo de encabezado e player.h cuando sea necesario.

jugador.h

#ifndef PLAYER_H // To make sure you don''t declare the function more than once by including the header multiple times. #define PLAYER_H #include "stdafx.h" #include <SFML/Graphics.hpp> int playerSprite(); #endif

player.cpp

#include "player.h" // player.h must be in the current directory. or use relative or absolute path to it. e.g #include "include/player.h" int playerSprite(){ sf::Texture Texture; if(!Texture.loadFromFile("player.png")){ return 1; } sf::Sprite Sprite; Sprite.setTexture(Texture); return 0; }

main.cpp

#include "stdafx.h" #include <SFML/Graphics.hpp> #include "player.h" //Here. Again player.h must be in the current directory. or use relative or absolute path to it. int main() { // ... int p = playerSprite(); //...

No es una buena práctica, pero trabaja para pequeños proyectos. declara tu función en main.cpp

#include "stdafx.h" #include <SFML/Graphics.hpp> // #include "player.cpp" int playerSprite(); // Here int main() { // ... int p = playerSprite(); //...


Su sprite se crea a mitad de camino a través de la función playerSprite ... también queda fuera del alcance y deja de existir al final de esa misma función. El sprite debe crearse donde puedas pasarlo a playerSprite para inicializarlo y también a donde puedas pasarlo a tu función de sorteo.

Tal vez declararlo por encima de su primer while ?