0
錯誤 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移動到文件末尾,以防止它包含的代碼被多次包含。 –