class mob;
class player
{
public:
sf::RectangleShape rect;
float bottom, left, right, top;
player(sf::Vector2f position, sf::Vector2f size, sf::Color color);
void update();
void collision(mob M);
};
碰撞定义:
void player::collision(mob M)
{
if(right < M.left)
rect.setPosition(M.left, rect.getPosition().y);
}
我在之前的版本中使碰撞功能成为一个bool,因此它会返回true或false。好吧,在测试它作为一个bool后,我决定把它变成一个空白。但是,只要我将其设为无效,我就会收到此错误:
1&gt; main.obj:错误LNK2001:未解析的外部符号&#34; public:bool __thiscall player :: collision(class mob)&#34; (?碰撞@ @@玩家@@@ QAE_NVmob Z)
1&gt; C:\ SFML_Project \ Release \ SFML_Project.exe:致命错误LNK1120:1 未解决的外部因素
此外,如有必要,您可以在此处找到声明:
int main()
{
sf::RenderWindow Window;
Window.create(sf::VideoMode(800,600),"SFML Project");
player Cplayer(sf::Vector2f(10,10), sf::Vector2f(32,32), sf::Color::Red);
mob Cmob(sf::Vector2f(368,284), sf::Vector2f(64,32), sf::Color::Blue);
Window.setKeyRepeatEnabled(true);
while(Window.isOpen())
{
sf::Event Event;
while(Window.pollEvent(Event))
{
switch(Event.type)
{
case sf::Event::Closed:
Window.close();
break;
/*case sf::Event::LostFocus:
std::cout << "Window lost focus!" << std::endl;
break;*/
}
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
{
Cplayer.rect.move(0, -0.2);
}
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
{
Cplayer.rect.move(0, 0.2);
}
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
{
Cplayer.rect.move(0.2, 0);
}
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
{
Cplayer.rect.move(-0.2, 0);
}
Cplayer.update();
Cmob.update();
Cplayer.collision(Cmob);
Window.draw(Cplayer.rect);
Window.draw(Cmob.rect);
Window.display();
Window.clear();
}
}
修改
似乎我的帖子已被标记为重复。这是一种不那么微妙的方式来转移举证责任。链接线程中的答案与我的问题无关,并且上下文在这里发生了巨大的变化。
答案 0 :(得分:0)
最有可能的是,main.obj
是针对较旧的player
头文件构建的,因此它仍然引用返回void的方法的版本。链接器找不到此符号,因为player.obj
文件不再包含它。
删除所有.obj
文件(IDE中的&#34; clean&#34;命令应执行此操作)并重建以确保它使用更新的头文件中的信息。