我试图通过查看旧问题和答案来找到解决此问题的方法,但我无法发现我的情况出了什么问题。我收到以下错误:
Error 66 error LNK2019: unresolved external symbol "public: static class PhysicsBody *
__cdecl PhysicsBody::createBox(float,float,enum PhysicsBodyType,float)"
(?createBox@PhysicsBody@@SAPAV1@MMW4PhysicsBodyType@@M@Z) referenced in function
"public: __thiscall Enemy::Enemy(void)" (??0Enemy@@QAE@XZ)
奇怪的是,代码文件在那里,包括 .H 和 .CPP,它们包含在解决方案中并正确编译。这是代码文件:
// Enemy.h
#pragma once
class Enemy {
public:
Enemy();
private:
PhysicsBody* m_body;
};
// Enemy.cpp
#include "Enemy.h"
#include "PhysicsBody.h"
Enemy::Enemy() {
m_body = PhysicsBody::createBox(1.f, 1.f, PhysicsBodyType::Dynamic);
}
// PhysicsBody.h
#pragma once
enum PhysicsBodyType {
Static, Dynamic, Kinematic
};
class PhysicsBody {
public:
static PhysicsBody* createBox(float width, float height, PhysicsBodyType type, float mass = 1.f);
private:
PhysicsBody();
};
// PhysicsBody.cpp
#include "PhysicsBody.h"
PhysicsBody::PhysicsBody() {
}
PhysicsBody* PhysicsBody::createBox(float width, float height, PhysicsBodyType type, float mass) {
return new PhysicsBody();
}
(我在这里裁剪了一些不相关的代码。)
我已经仔细浏览了代码数十次,但没有发现任何错误。我在整个项目中都有类似的代码,其他一切正常。出于某种原因,这个 PhysicsBody
类导致了这些问题。我已经检查过它是否包含在项目/解决方案中,文件类型是 C/C++ 代码,它没有被标记为内容,总体而言它应该可以工作。
最佳答案
问题很可能是由错误的 VS 项目文件引起的。我复制了 PhysicsBody.h/.cpp 文件的内容,删除了这两个文件,创建了新文件并粘贴了原始内容。所有代码都完全相同并且现在可以正常工作,所以我断定这是一个与 VS 相关的错误。
关于c++ - LNK2019 - 未解析的外部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25824925/