C ++未解析的外部

时间:2014-02-02 23:24:02

标签: c++ class externals

即时编写游戏,我遇到了“C ++ unresolved externals”的问题

**我的班级:**

Terrain.h

Class Terrain
{};

PhysicsObject.h

Class PhysicsObject
{};

Physics.h

#include PhysicsObject
Class Physics : public PhysicsObject
{
public:
    Physics();
    void add(PhysicsObject* o);
    void remove(PhysicsObject* o);
};

RenderObject.h

Class RenderObject
{};

Render.h

#include RenderObject.h
Class Render: public RenderObject
{
public:
Render();
void add(RenderObject* o);
void remove(RenderObject* o);
};

Pixel.h

#include "PhysicsObject.h"
#include "RenderObject.h"

class pixel : public RenderObject, public PhysicsObject
{};

的main.cpp

 #include "Physics.h"
 #include "Render.h"
 #include "Terrain.h"
 #include "Pixel.h"

void main()
{
    Physics* physics
    Render* render
    Terrain* terrain

    Pixel* pixel1 = new Pixel()

    renderer->add(pixel1);
    physics->add(pixel1);
}

我在main中有一个方法可以创建像素并将它们存储在渲染和物理内部的向量中。我的问题是我需要访问物理,地形和渲染像素内部,以便我的像素可以自己处理它们的碰撞和破坏,并从渲染和物理向量中移除它们。

任何想法如何实现这一点,就像我尝试这样做时,当我将指针传递给Pixel类时,我得到了C ++未解析的外部。可能有些类在被编译器创建之前被调用,但我不知道如何解决这个问题。

2 个答案:

答案 0 :(得分:1)

“未解析的外部”是 LINK TIME 错误。通常,您需要做的就是确保在构建.exe之前编译了所有源代码,并包含了所有库。

例如,如果您正在使用MSVC ++,请确保您的项目包含terrain.cpp,PhysicsObject.cpp等。这同样适用于您用于构建项目的任何其他IDE或Makefile。

答案 1 :(得分:0)

“未解析的外部”也可以看作编译器看到的声明,但不是定义。这意味着它无法找到您的.cpp文件。

他们属于另一个项目,你有一个新项目吗?如果是这样,将它们从文件资源管理器拖放到VS中的Source“文件夹”。您可以单击一个文件,并在VS btw的属性中查看它的相对路径。