1. ホーム
  2. c++

[解決済み】他のファイルで見つけた関数を呼び出すには?

2022-02-15 07:29:51

質問

最近C++とSFMLライブラリを使い始めたのですが、もしスプライトを "player.cpp" というファイルに定義したら、 "main.cpp" にあるメインループでどのようにそれを呼び出すのでしょうか?

以下は私のコードです(これは SFML 2.0 であり、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;
}

プレイヤー.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;
}

助けが必要なのは main.cpp と書いてあるところ window.draw(); を、私のドローコードに追加しました。その括弧の中に、私が画面にロードしたいスプライトの名前があるはずです。私が検索し、推測で試した限りでは、私はそのdraw関数が他のファイル上の私のスプライトで動作するように成功しませんでした。 私は何か大きな、そして非常に明白なもの(どちらのファイルでも)を見逃しているような気がしますが、しかしまた、すべてのプロはかつて初心者でした。

解決方法は?

ヘッダーファイルを使用することができます。

グッドプラクティスです。

というファイルを作成します。 player.h 他のcppファイルが必要とするすべての関数をそのヘッダーファイルで宣言し、必要なときにインクルードします。

player.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

プレイヤー.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();  
    //...


あまり良い方法とは言えませんが、小さなプロジェクトでは有効です。

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


int playerSprite();  // Here

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