所以我正在进行序列化(我之前从未这样做过,所以这对我来说是第一次)而且我所做的是创建了一个名为serialisable的基类,所有我可以序列化的其他类都可以从以下内容中获得: / p>
#include <iostream>
class Serializable{
public:
Serializable();
virtual ~Serializable();
virtual void serialize();
virtual void deserialize();
};
然后我有一个继承自它的类,它是我的AbstractChunk类:
#pragma once
#include <iostream>
#include <list>
#include <fstream>
#include "AbstractBlock.h"
#include "Serialisable.h"
using namespace std;
#ifndef ABSTRACTCHUNK_H
#define ABSTRACTCHUNK_H
class AbstractChunk: public Serializable{
public:
AbstractChunk();
AbstractChunk(int x, int y);
~AbstractChunk();
virtual int getXpos();
virtual int getYpos();
virtual bool unload();
void serialize();
void deserialize();
private:
list<AbstractBlock> blocks;
int xpos;
int ypos;
};
#endif
然后我的AbstractChunk的.cpp(我编辑了所有非重要的东西):
#include "AbstractChunk.h"
void AbstractChunk::serialize(){
ofstream chunkFile;
chunkFile.open("ChunkData/" + to_string(xpos) + "." + to_string(ypos) + ".chunk");
if (!chunkFile.good())
cout << "Problem Opening Chunk File" << xpos << "." << ypos << endl;
chunkFile << "xpos:" << xpos << "\n";
chunkFile << "ypos:" << ypos << "\n";
chunkFile.close();
}
void AbstractChunk::deserialize(){
}
那么这个错误来自哪里?这是一个链接器错误,但我根本没有弄乱依赖项或项目设置,我感觉我像往常一样做一些愚蠢的事情。
EDIT 以下是实际错误
Error 1 error LNK2019: unresolved external symbol "public: __thiscall Serializable::Serializable(void)" (??0Serializable@@QAE@XZ) referenced in function "public: __thiscall AbstractChunk::AbstractChunk(int,int)" (??0AbstractChunk@@QAE@HH@Z) C:\Users\Magnus\Documents\Visual Studio 2013\Projects\Top Down Shooter\Top Down Shooter\AbstractChunk.obj Top Down Shooter
Error 2 error LNK2019: unresolved external symbol "public: virtual __thiscall Serializable::~Serializable(void)" (??1Serializable@@UAE@XZ) referenced in function __unwindfunclet$??0AbstractChunk@@QAE@HH@Z$0 C:\Users\Magnus\Documents\Visual Studio 2013\Projects\Top Down Shooter\Top Down Shooter\AbstractChunk.obj Top Down Shooter
答案 0 :(得分:0)
您没有指定确切的链接错误,但肯定您缺少某些方法,您已声明:
class Serializable {
..
virtual void serialize();
virtual void deserialize();
}
作为非纯虚方法,而您没有实现它们。你应该把它们变成纯粹的,因为Serializable
没有实现功能,但它只是一个接口:
class Serializable {
..
virtual void serialize() = 0;
virtual void deserialize() = 0;
}