【发布时间】:2014-04-09 19:20:31
【问题描述】:
我正在尝试使用 SFML 库在 C++ 中制作一个在屏幕上移动的角色。 每次制作项目时,我都会遇到相同的 LNK 2001 错误。
请向我解释我做错了什么以及如何解决它。我仍然是初学者,所以如果您有任何关于修复错误或编写代码的建议,我会很高兴的。
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 : error LNK2001: unresolved external symbol "public: static int Character::characterY" (?characterY@Character@@2HA)
1>main.obj : error LNK2001: unresolved external symbol "public: static int Character::characterX" (?characterX@Character@@2HA)
1>C:\Users\SONY\Documents\Visual Studio 2010\Projects\Top Down Game\Debug\Game.exe : 致命错误 LNK1120: 2 unresolved externals
谢谢:D
编辑:仅供参考,我的代码没有类,并且运行良好,它只是 main.cpp 中的一大块代码
编辑:程序文件夹链接:https://www.dropbox.com/s/3yyjti8zwu019s7/Top%20Down%20Game%20With%20Classes.rar
【问题讨论】:
-
给出的错误是什么? LNK 2001 表示未解析的符号,它也应该为您提供该符号的名称。
-
您在
main.cpp中#includeGame.cpp。不要那样做! -
您的
Character类与这些错误不匹配。错误说它们被声明为static,但您的代码却不然。 -
@faranwath 我不需要它来运行该功能?
-
@SamCristall 我知道这真的很奇怪!!!我有一种感觉视觉工作室把我搞砸了......
标签: c++ visual-studio-2010 sfml