1

我有一个在头文件中定义并在源文件中声明的方法。当我调用该方法时,链接器会抛出一个错误,说它找不到错误。

错误 1 ​​错误 LNK2019:函数 _main 中引用的未解析的外部符号“public: class Chunk * __thiscall World::getChunk(short,short)”(?getChunk@World@@QAEPAVchunk@@FF@Z)

错误 2 错误 LNK1120: 1 未解决的外部

世界.h:

#pragma once
#include <map>
#include <vector>
#include "Chunk.h"

class World {
public:
    World();
    ~World();
    void generateChunk(short x, short z);
    inline Chunk* getChunk(short x, short z);
private:
    std::vector< std::vector<Chunk*> > loadedChunks;
};

世界.cpp:

#include "World.h"
#include <iostream>

World::World() : loadedChunks(1, std::vector<Chunk*>(1)) {}

World::~World() {
    for(unsigned short x = loadedChunks.size(); x > 0; --x)
        for(unsigned short z = loadedChunks[x].size(); z > 0; --z) {
            std::cout << "Destructed" << std::endl;
            delete loadedChunks[x][z];
        }
}

void World::generateChunk(short x, short z) {
    Chunk chunk(x, z);
    delete loadedChunks[x][z];
    chunk.generate();
    loadedChunks[x][z] = &chunk;
}

Chunk* World::getChunk(short x, short z) {
    return loadedChunks[x][z];
}

后来当我运行时:

World world;
world.generateChunk(0, 0);
world.getChunk(0, 0);

它不会编译/链接上述错误消息。

4

3 回答 3

3

您必须在头文件中包含函数定义,因为您将其标记为内联。

inline Chunk* getChunk(short x, short z);
于 2013-07-28T16:02:08.697 回答
2

getChunk() 是内联定义的——因此链接器将找不到它。

(编辑/添加)。此修复程序应该执行以下操作:

inline Chunk* getChunk(short x, short z) {
    return loadedChunks[x][z];
}

并从 cpp 文件中删除实现。

于 2013-07-28T16:02:18.963 回答
1

已在此处回答:内联函数链接器错误

您必须在标头中声明主体,因为编译器必须知道它是什么

于 2013-07-28T16:07:47.503 回答