我想使用SFML庫在C++中圍繞屏幕移動一個字符。 每次做一個項目我都會得到相同的LNK 2001錯誤。LNK 2001未解決C++ SFML
請向我解釋我做錯了什麼,如何解決它。我仍然是初學者,所以如果你有任何關於修復錯誤或編寫代碼的建議,我很樂意。
Main.cpp的:
#include "Game.cpp"
#include "Game.h"
int main()
{
Game Game;
Game.GameRun();
}
Game.h:
#pragma once
#include <SFML\Window.hpp>
#include "Character.h"
class Game
{
public:
void GameRun();
void UpdateGame(Character player);
void Controls(int sourceX, int sourceY, Character player);
};
Character.h:
#pragma once
#include <SFML\Graphics.hpp>
#include <SFML\System.hpp>
#include <SFML\Window.hpp>
#include "Game.h"
class Character
{
public:
enum Direction {Down, Left, Right, Up};
int characterX;
int characterY;
sf::Texture txt_character;
sf::Sprite spr_character;
};
Game.cpp:
#include "Game.h"
#include "Character.h"
#include <iostream>
inline void Game::GameRun()
{
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML test");
Character player;
player.characterX = 1;
player.characterY = Character::Down;
player.txt_character.loadFromFile("character sprite sheet.png");
player.spr_character.setTexture(player.txt_character);
while(window.isOpen())
{
Game::UpdateGame(player);
}
}
inline void Game::UpdateGame(Character player)
{
sf::Event event;
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML test");
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
Game::Controls(player.characterX, player.characterY, player);
player.spr_character.setTextureRect(sf::IntRect(player.characterX * 32, player.characterY * 32, 32, 32));
window.draw(player.spr_character);
window.display();
window.clear();
}
inline void Game::Controls(int sourceX, int sourceY, Character player)
{
if (sf::Keyboard::isKeyPressed(sf::Keyboard::W))
{
sourceY = Character::Up;
sourceX++;
if (sourceX * 32 >= player.txt_character.getSize().x)
sourceX = 0;
player.spr_character.move(0, -2);
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::S))
{
sourceY = Character::Down;
sourceX++;
if (sourceX * 32 >= player.txt_character.getSize().x)
sourceX = 0;
player.spr_character.move(0, 2);
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
{
sourceY = Character::Left;
sourceX++;
if (sourceX * 32 >= player.txt_character.getSize().x)
sourceX = 0;
player.spr_character.move(-2, 0);
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
{
sourceY = Character::Right;
sourceX++;
if (sourceX * 32 >= player.txt_character.getSize().x)
sourceX = 0;
player.spr_character.move(2, 0);
}
}
錯誤:
1> main.obj:錯誤LNK2001:解析外部符號? 「市民:靜態INT字:: characterY」(characterY @字符@@ 2HA)
1> main.obj:錯誤LNK2001:解析外部符號? 「公共:靜態INT字符:: characterX」(characterX @字符@@ 2HA)
1> C:\用戶\ SONY \ Documents \ Visual Studio 2010 \ Pr ojects \自上而下游戲\調試\下的Game.exe:致命錯誤LNK1120:2周無法解析的外部
感謝:d
編輯:FYI我有沒有類的代碼,它是可以正常使用,這只是一個大在main.cpp中
編輯的代碼塊:鏈接到文件夾的程序:https://www.dropbox.com/s/3yyjti8zwu019s7/Top%20Down%20Game%20With%20Classes.rar
什麼被賦予了錯誤? LNK 2001意味着未解決的符號,它應該給你的那個符號的名字。 –
您正在#main.cpp中包含'Game.cpp'。不要這樣做! – 2014-03-06 21:42:36
您的'Character'類與這些錯誤不匹配。錯誤表示它們被聲明爲「靜態」,但是你的代碼另有說明。 –