解析外部符号“类”

问题描述:

错误 LNK2001解析的外部符号“类对象时,对象”解析外部符号“类”

当类被声明为一个外部,将创建该接头误差为每一段代码连接到它。但是当我在其他文件中创建该类的私有版本时,它们工作正常。

更改类变量的名称不起作用,所以它不会与导致错误的映射系统发生冲突。

我无法看到并修改错误。之前的工作是我解开文件,希望它再次运行,但事实并非如此。

Object.cpp

#include "object.h" 

#include "Ball.h" 

// Constructor 
Object::Object() { 

    std::map<int, std::map<int, IMAGEINFO>> object; 

}; 

Object::~Object() { 

    object.clear(); 

};  

void Object::Update() { 

    // Gets all the base object ID's 
    for (unsigned int i = 0; i < object.size(); i++) { 

    // Gets all the object's inside that ID. 
     for (unsigned int j = 0; j < object[i].size(); j++) { 

      // Gets the object. 
      IMAGEINFO obj = object[i][j]; 

      // Calls for the processes of the object 
      obj.Update(); 
     } 
    } 
} 

void Object::Render(HDC hdc, RECT* prc, BITMAP bm) { 

    // Gets all the base object ID's 
    for (unsigned int i = 0; i < object.size(); i++) { 

     // Gets all the object's ID's. 
     for (unsigned int j = 0; j < object[i].size(); j++) { 

      // Gets the object.  
      IMAGEINFO obj = object[i][j]; 

      // Calls for the rendering of the object   
      obj.Render(hdc, prc, bm); 

     } 
    } 
} 

int Object::addObject(IMAGEINFO obj) { 

    bool index = false; 
    int indexVal; 
    short run = 0; 

    while (!index) { 

     if (typeid(obj).name() == typeid(object[run]).name()) { 

      object[run][object[run].size()] = obj; 
      indexVal = object[run].size(); 
      index = true; 

     } 
     else if (run == object.size()) { 

      object[run][0] = obj; 
      indexVal = 0; 
      index = true; 

     } 

     run++; 

    } 

    return indexVal; 

} 

object.h

#ifndef OBJECT_H 
#define OBJECT_H 
#endif 

#include <windows.h> 
#include <iostream> 
#include <map> 

#include "renderer.h" 
#include "resource.h" 

class Object { 
public: 

    // Constructors/Deconstructors 
    Object(); 
    ~Object(); 

    // Processes 
    int addObject(IMAGEINFO value); 
    void Update(); 
    void Render(HDC hdc, RECT* prc, BITMAP bm); 

private: 

    std::map<int, std::map<int, IMAGEINFO>> object; 

}; 

extern Object objects; 

Ball.cpp

#include "Ball.h"; 

int indexPos; 

HBITMAP hbm_Ball_Image = NULL; 
HBITMAP hbm_Ball_Mask = NULL; 

IMAGEINFO ballInfo; 

void Ball(BITMAP bm, int assx, int assy) { 

    indexPos = objects.addObject(ballInfo); 

    hbm_Ball_Image = createImage((HBITMAP) BITMAP_BALL); 
    hbm_Ball_Mask = createMask((HBITMAP)BITMAP_BALL, RGB(255, 255, 255), bm); 

    GetObject(hbm_Ball_Image, sizeof(bm), &bm); 

    ballInfo.height = bm.bmHeight; 
    ballInfo.width = bm.bmWidth; 

    ballInfo.x = assx; 
    ballInfo.y = assy; 

    ballInfo.speedX = 1; 
    ballInfo.speedY = 0; 

} 

ball.h

#ifndef BALL_H 
#define BALL_H 
#endif 

#include <windows.h> 
#include <iostream> 
#include <map> 

#include "renderer.h" 
#include "resource.h" 
#include "object.h" 

void Ball(BITMAP bm, int assx, int assy); 
void render(HDC hdc, RECT* prc, BITMAP bm); 
+2

哪里是你的'对象objects'定义? – Oleg

+0

'object'是你构造函数中的局部变量。你不能在析构函数中清除它。 –

+0

看看你的头文件'包括卫兵 - 他们什么都不做。应该将#endif移动到文件末尾,以防止它包含的代码被多次包含。 –

添加

Object objects; // construct an instance of the class 

到文件末尾Object.cpp

+0

谢谢你,我是一个白痴,虽然我不记得之前把它放进去。我会记得下次:) – Kryton