2013-07-28 27 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

将实现复制到标题中。 –

相关问题