我有一个在头文件中定义的方法,并在源文件中声明。当我调用该方法时,链接器会抛出一个错误,指出它无法找到错误。
错误1错误LNK2019:未解析的外部符号“public:class Chunk * __thiscall World :: getChunk(short,short)“(?getChunk @ World @@ QAEPAVChunk @@ FF @ Z)在函数_main
中引用错误2错误LNK1120:1个未解析的外部
World.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;
};
World.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);
它不会编译/链接上面提到的错误消息。
答案 0 :(得分:3)
您必须在头文件中包含函数定义,因为您已将其标记为内联。
inline Chunk* getChunk(short x, short z);
答案 1 :(得分:2)
getChunk()是内联定义的 - 因此链接器将找不到它。
(编辑/添加)。这个修复应该做:
inline Chunk* getChunk(short x, short z) {
return loadedChunks[x][z];
}
并从cpp文件中删除实现。
答案 2 :(得分:1)
这里已经回答:inline function linker error
您必须在标头中声明主体,因为编译器必须知道它的内容是什么