I've been working on this player class all day and now I get this error when I build everything after I passed all of the debugging. It's my first time really messing with headers/classes and SFML. Also I'm new to video game programming so I still lack a lot of the intuition.
These are my exact two errors-19 error LNK2019: unresolved external symbol "public: bool __thiscall Player::load_player(void)" (?load_player@Player@@QAE_NXZ) referenced in function _main C:\Users\OverLordSupreme\Documents\Visual Studio 2012\Projects\Playgrounds\Playgrounds\main.obj DIM
Error 20 error LNK1120: 1 unresolved externals C:\Users\OverLordSupreme\Documents\Visual Studio 2012\Projects\Playgrounds\Debug\DIM.exe DIM
Forewarning- I commented out some code for various reasons, so everything not commented is how I intend for this program to work.
The main file:#include <SFML/Graphics.hpp>
#include <math.h>
#include <iostream>
#include "tile_class.cpp"
#include "player.h"
using namespace sf;
int main()
{
const int WINDOW_WIDTH = 512;
const int WINDOW_HEIGHT = 256;
RenderWindow window(VideoMode(512, 256), "DIM");
window.setKeyRepeatEnabled(false);
const int level[] =
{
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
};
TileMap map;
if (!map.load("grass.png", Vector2u(32,32), level,16, 8))
{return -1;}
Player Hero;
Hero.setPlayer(100,100,0,0,0,0,1,Vector2i(256,128));
Hero.load_player();
RectangleShape upper_border(Vector2f(WINDOW_WIDTH, 5));
upper_border.setPosition(0,-5);
RectangleShape lower_border(Vector2f(WINDOW_WIDTH, 5));
lower_border.setPosition(0,WINDOW_HEIGHT);
RectangleShape left_border(Vector2f(5, WINDOW_HEIGHT));
left_border.setPosition(-5,0);
RectangleShape right_border(Vector2f(5, WINDOW_HEIGHT));
right_border.setPosition(WINDOW_WIDTH,0);
while (window.isOpen())
{
FloatRect boundingBox = Hero.getGlobalBounds();
FloatRect left_box = left_border.getGlobalBounds();
FloatRect right_box = right_border.getGlobalBounds();
FloatRect upper_box = upper_border.getGlobalBounds();
FloatRect lower_box = lower_border.getGlobalBounds();
Event event;
while (window.pollEvent(event))
{
if (event.type == Event::Closed)
window.close();
}
double move_variable=.035*Hero.getSpeed();
if (Keyboard::isKeyPressed(Keyboard::Left) && !boundingBox.intersects(left_box))
{Hero.move(-move_variable,0);}
if (Keyboard::isKeyPressed(Keyboard::Right) && !boundingBox.intersects(right_box))
{Hero.move(move_variable,0);}
if (Keyboard::isKeyPressed(Keyboard::Up) && !boundingBox.intersects(upper_box))
{Hero.move(0,-move_variable);}
if(Keyboard::isKeyPressed(Keyboard::Down) && !boundingBox.intersects(lower_box))
{Hero.move(0,move_variable);}
window.clear(Color::White);
window.draw(map);
window.draw(left_border);
window.draw(right_border);
window.draw(upper_border);
window.draw(lower_border);
window.draw(Hero);
window.display();
}
return 0;
}
The Player hpp file#include <SFML/Graphics/Sprite.hpp>
#include <SFML/Graphics/Drawable.hpp>
#include <SFML/Graphics.hpp>
using namespace sf;
class Player: public Sprite, public Texture
{
public:
Player();
void setPlayer(int current_health, int health_pool, int current_armor, int current_weapon, int weapon_upgrade, int inventory, int speed, Vector2i position);
void setCurrentHealth(int);
void setHealPool(int);
void setCurrentArmor(int);
void setCurrentWeapon(int);
void setWeaponUpgrade(int);
void setInventory(int);
void setSpeed(int);
void setPosition(Vector2i);
int getCurrentHealth();
int getHealPool();
int getCurrentArmor();
int getCurrentWeapon();
int getWeaponUpgrade();
int getInventory();
int getSpeed();
Vector2i getPosition();
void playermove(Vector2i);
bool load_player();
private:
int player_states[7];
Vector2i player_position;
Sprite playerSprite;
int current_health;
int health_pool;
int current_armor;
int current_weapon;
int weapon_upgrade;
int inventory;
int speed;
Vector2i position;
};
And finally the player cpp file#include <SFML/Graphics.hpp>
#include "player.h"
#include <iostream>
using namespace sf;
using namespace std;
Player::Player()
{
}
void Player::setPlayer(int current_health, int health_pool, int current_armor, int current_weapon, int weapon_upgrade, int inventory, int speed, Vector2i position)
{
setCurrentHealth(current_health);
setHealPool(health_pool);
setCurrentArmor(current_armor);
setCurrentArmor(current_armor);
setCurrentWeapon(current_weapon);
setWeaponUpgrade(weapon_upgrade);
setInventory(inventory);
setSpeed(speed);
setPosition(position);
}
void Player::setCurrentHealth(int current_health)
{player_states[0]=current_health;}
void Player::setHealPool(int health_pool)
{player_states[1]=health_pool;}
void Player::setCurrentArmor(int current_armor)
{player_states[2]=current_armor;}
void Player::setCurrentWeapon(int current_weapon)
{player_states[3]=current_weapon;}
void Player::setWeaponUpgrade(int weapon_upgrade)
{player_states[4]=weapon_upgrade;}
void Player::setInventory(int inventory)
{player_states[5]=inventory;}
void Player::setSpeed(int speed)
{player_states[6]=speed;}
void Player::setPosition(Vector2i position)
{player_position=position;}
int Player::getCurrentHealth()
{int current_health=player_states[0];
return current_health;}
int Player::getHealPool()
{int health_pool=player_states[1];
return health_pool;}
int Player::getCurrentArmor()
{int current_armor=player_states[2];
return current_armor;}
int Player::getCurrentWeapon()
{int current_weapon=player_states[3];
return current_weapon;}
int Player::getWeaponUpgrade()
{int weapon_upgrade=player_states[4];
return weapon_upgrade;}
int Player::getInventory()
{int inventory=player_states[5];
return inventory;}
int Player::getSpeed()
{int speed=player_states[6];
return speed;}
Vector2i Player::getPosition()
{Vector2i position=player_position;
return position;}
bool load_player()
{
Texture player_texture;
if (!player_texture.loadFromFile("face_right"))
{
cerr<< "Texture error" << endl;
return false;
}
Sprite player;
player.setTexture(player_texture);
return true;
}
Any help with this would be awesome! I did try to rename the whole project from "Playgrounds" to "DIM", I feel like that might be helpful to know.
Also while I'm posting this, if anyone could critique my coding that'd be great. Like I said I'm new to this stuff including C++ so I don't know if there's any more ideal ways to go about what I'm doing.