2013-07-28 26 views
1

我有一個在頭文件中定義並在源文件中聲明的方法。當我調用該方法時,鏈接器會拋出一個錯誤,指出它找不到錯誤。Linker抱怨找不到現有的方法(C++)

錯誤1個錯誤LNK2019:無法解析的外部符號 「公用:類組塊 * __thiscall世界::的GetChunk(短,短)」 函數_main引用(@的GetChunk世界@@ QAEPAVChunk @@ FF @ Z?)

錯誤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); 

它不會編譯/鏈接與上面提到的錯誤消息。

回答

3

您必須在頭文件中包含函數定義,因爲您將其標記爲內聯。

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

我不太瞭解,它是在頭文件中定義。 –

+1

@Binero:你已經顯示的代碼,在'World.cpp'中定義它,它應該在'World.h'中定義。 –

+0

所以當我做內聯方法時,它們應該在聲明的同一個文件中定義? :O –

2

getChunk()被定義爲內聯 - 因此鏈接器將不會找到它。

(編輯/添加)。此修復程序應該這樣做:

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

並從cpp文件中刪除實施。

+0

如何解決它而不刪除它的'inlinyness'? –

+0

將實現複製到標題中。 –

相關問題