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

error LNK2019: unresolved external symbol... referenced in function

本文关键字:符号 函数 引用 外部 LNK2019 错误      更新时间:2023-10-16

我正在研究序列化(我以前从未做过这对我来说是第一次)我所做的是创建一个名为serialisable的基类所有其他可以序列化的类都可以从:

#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(){
}

那么这个错误是从哪里来的呢?这是一个链接器错误,但是我根本没有弄乱依赖关系或项目设置,我有一种感觉,我像往常一样做了一些愚蠢的事情。

编辑以下是实际的错误

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:UsersMagnusDocumentsVisual Studio 2013ProjectsTop Down ShooterTop Down ShooterAbstractChunk.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:UsersMagnusDocumentsVisual Studio 2013ProjectsTop Down ShooterTop Down ShooterAbstractChunk.obj   Top Down Shooter

您没有指定确切的链接错误,但肯定您错过了一些方法,您已经声明:

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

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

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