未解析的外部符号“class”

时间:2015-11-06 15:08:52

标签: c++ class lnk2001

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

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

更改类变量的名称无效,因此它不会与导致错误的映射系统冲突。

我无法查看和修改错误。之前它正在工作,我将文件解除,以期再次运行,但事实并非如此。

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);

1 个答案:

答案 0 :(得分:2)

添加

Object objects;  // construct an instance of the class

到文件Object.cpp的末尾