Kryton
Kryton

Reputation: 11

Unresolved External symbol "class"

Error LNK2001 unresolved external symbol "class Object objects"

When the class is declared as an extern, it will create this linker error for every piece of code connected to it. But when I create a private version of the class in other files, they work fine.

Changing the name of the class variable has no effect, so it does not conflict with the mapping system causing the error.

I am unable to see and amend the error. It was working previously to which I undid the files in the hopes of it functioning again, but it did not.

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

Upvotes: 1

Views: 2809

Answers (1)

ravenspoint
ravenspoint

Reputation: 20457

Add

Object objects;  // construct an instance of the class

to the end of file Object.cpp

Upvotes: 3

Related Questions