programing

다른 파일에서 찾은 함수를 호출하는 방법은 무엇입니까?

nasanasas 2020. 12. 25. 10:07
반응형

다른 파일에서 찾은 함수를 호출하는 방법은 무엇입니까?


저는 최근에 C ++와 SFML 라이브러리를 선택하기 시작했습니다. "player.cpp"라는 파일에 Sprite를 정의했는지 궁금합니다. "main.cpp"에있는 메인 루프에서 어떻게 호출할까요?

내 코드는 다음과 같습니다 (1.6이 아닌 SFML 2.0입니다!).

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;
}

도움이 필요한 main.cpp곳은 window.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

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

좋은 방법은 아니지만 소규모 프로젝트에서 작동합니다. main.cpp에서 함수를 선언하십시오.

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


int playerSprite();  // Here

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

프로그램 실행 방법에 대한 @ user995502의 답변에 약간의 추가.

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


스프라이트는 playerSprite 함수를 통해 중간에 생성됩니다. 또한 범위를 벗어나 동일한 함수의 끝에 더 이상 존재하지 않습니다. 스프라이트는 초기화하기 위해 playerSprite에 전달할 수있는 위치와 그리기 함수에 전달할 수있는 위치에 만들어야합니다.

아마도 당신의 첫 번째 위에 선언 while할까요?

참조 URL : https://stackoverflow.com/questions/15891781/how-to-call-on-a-function-found-on-another-file

반응형