如何调用另一个文件上找到的函数?

Saf*_*ixk 60 c++ identifier sfml

我最近开始学习C++和SFML库,我想知道我是否在一个名为"player.cpp"的文件上定义了一个Sprite,如何在位于"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;
}
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

我需要帮助的main.cpp地方window.draw();在我的绘图代码中所说的位置.在该括号中,应该有我想要加载到屏幕上的Sprite的名称.据我搜索,并通过猜测尝试,我没有成功使绘图功能与我的精灵在另一个文件上工作.我觉得我错过了一些大的,非常明显的(在任何一个文件上),但是再一次,每个职业选手都曾经是一个新手.

小智 84

您可以使用头文件.

好的做法.

您可以创建一个名为player.hdeclare 的文件,声明该头文件中其他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
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

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();  
    //...
Run Code Online (Sandbox Code Playgroud)

这不是一个好的做法,但适用于小型项目.在main.cpp中声明你的函数

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


int playerSprite();  // Here

int main()
{
    // ...   
    int p = playerSprite();  
    //...
Run Code Online (Sandbox Code Playgroud)

  • 好的,先生,快要拯救我的屁股了。我一直听说过这些该死的头文件,但从未真正研究过它们,它们非常重要,是吗?但是还有一个问题,一旦我完成了这个,我将它导入到“main.cpp”中,我的“main.cpp”文件在window.draw区域中会是什么样子,那会怎样呢? (3认同)
  • `main.cpp` 如何知道在 `player.cpp` 中查找代码? (3认同)

rah*_*311 5

除了如何运行程序外,@ user995502的答案还很小。

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