105 votes

Comment faire appel à une fonction trouvée dans un autre fichier ?

Je commence récemment à me familiariser avec le C++ et la bibliothèque SFML, et je me demandais si je définissais un Sprite dans un fichier appelé de manière appropriée "player.cpp", comment pourrais-je l'appeler dans ma boucle principale située dans "main.cpp" ?

Voici mon code (Attention, il s'agit de SFML 2.0, pas 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;
}

Là où j'ai besoin d'aide, c'est dans le main.cpp où il est dit window.draw(); dans mon code de tirage. Dans cette parenthèse, il devrait y avoir le nom du Sprite que je veux charger à l'écran. J'ai beau avoir cherché et essayé de deviner, je n'ai pas réussi à faire fonctionner cette fonction de dessin avec mon sprite dans l'autre fichier. J'ai l'impression de rater quelque chose d'important et de très évident (sur l'un ou l'autre des fichiers), mais là encore, tous les pros ont été un jour des novices.

150voto

Vous pouvez utiliser des fichiers d'en-tête.

Bonne pratique.

Vous pouvez créer un fichier appelé player.h déclarer toutes les fonctions qui sont nécessaires à d'autres fichiers cpp dans ce fichier d'en-tête et l'inclure si nécessaire.

joueur.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();  
    //...

Ce n'est pas une bonne pratique mais cela fonctionne pour les petits projets. Déclarez votre fonction dans main.cpp

#include "stdafx.h"
#include <SFML/Graphics.hpp>
// #include "player.cpp"

int playerSprite();  // Here

int main()
{
    // ...   
    int p = playerSprite();  
    //...

29voto

rahuljain1311 Points 64

Petit complément à la réponse de @user995502 sur la façon d'exécuter le programme.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X