簡體   English   中英

鏈接器抱怨找不到現有方法(C ++)

[英]Linker complains it cannot find existing methods (C++)

我有一個在頭文件中定義並在源文件中聲明的方法。 當我調用該方法時,鏈接器將引發錯誤,表明找不到該錯誤。

錯誤1錯誤LNK2019:未解析的外部符號“公共:類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);

它不會編譯/鏈接上述錯誤消息。

由於已將函數定義標記為內聯,因此必須在頭文件中包含該函數定義。

inline Chunk* getChunk(short x, short z);

getChunk()是內聯定義的,因此鏈接器將找不到它。

(編輯/添加)。 此修復程序應該執行:

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

並從cpp文件中刪除實現。

已經在這里回答: 內聯函數鏈接器錯誤

您必須在標頭中聲明主體,因為編譯器必須知道其含義

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM