错误LNK2019:未解析的外部符号...在函数中引用

时间:2015-09-03 17:25:59

标签: c++ inheritance serialization

所以我正在进行序列化(我之前从未这样做过,所以这对我来说是第一次)而且我所做的是创建了一个名为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

1 个答案:

答案 0 :(得分:0)

您没有指定确切的链接错误,但肯定您缺少某些方法,您已声明:

class Serializable {
    ..
    virtual void serialize();
    virtual void deserialize();
}

作为非纯虚方法,而您没有实现它们。你应该把它们变成纯粹的,因为Serializable没有实现功能,但它只是一个接口:

class Serializable {
    ..
    virtual void serialize() = 0;
    virtual void deserialize() = 0;
}