Ошибка 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);
Где ваш объект 'objects' определен? – Oleg
'object' - локальная переменная в вашем конструкторе. Вы не можете очистить его в деструкторе. –
Взгляните на ваши заголовочные файлы, включая охранников - они ничего не делают. #endif следует перенести в конец файла, чтобы предотвратить включение кода, который он окружает, более одного раза. –