c++ - LNK2019 - 未解析的外部符号

标签 c++ unresolved-external

我试图通过查看旧问题和答案来找到解决此问题的方法,但我无法发现我的情况出了什么问题。我收到以下错误:

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/

相关文章:

c++ - 有一些方法可以使用 g++ C++ 编译器将错误日志打印到外部文件吗? (C++)

c++ - Visual Basic 和 C++

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

c++ - 来自 cpp 文件的部分行最终出现在输出文件中 - 闹鬼代码?

C++11 - 二维 map 上基于范围的 for 循环

c++ - ODB:包含带有通用声明的 *.hxx 文件时出现未解析的外部符号错误

c++ - 什么是 undefined reference /未解析的外部符号错误以及如何修复它?

c++ - 什么是 undefined reference /未解析的外部符号错误以及如何修复它?

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

c++ - 参数传递礼仪 (C++) const 与 value