Как вызвать функцию, найденную в другом файле?
недавно я начал собирать 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", где говорится окно.draw (); в моем коде рисования. В этой скобке, там должно быть имя Спрайта, который я хочу загрузить на экран. Насколько я искал, и пытался угадать. Мне не удалось заставить эту функцию рисования работать с моим спрайтом в другом файле. Я чувствую, что мне не хватает чего-то большого и очень очевидного (в обоих файлах), но опять же, каждый профессионал когда-то был новичком.
3 ответов
вы можете использовать заголовочные файлы.
хорошая практика.
вы можете создать файл с названием player.h
объявить все функции, которые нужны другим cpp файлы в заголовочный файл и включать его при необходимости.
плеер.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();
//...
не очень хорошая практика, но работает для небольших проектов. объявите свою функцию в главный.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 для инициализации, а также где вы можете передать его в свою функцию draw.
возможно, объявите его выше вашего первого while
?