[操作疑難] Link time errors for static members

本帖最後由 luckiejacky 於 2013-5-16 11:06 編輯
  1. class NavMeshLoader
  2. {
  3. public:
  4.         NavMeshLoader()
  5.         {
  6.                 m_navMesh = loadAll("all_tiles_navmesh.bin");
  7.                 m_navQuery->init(m_navMesh, 2048);
  8.         }
  9. public:
  10.         dtNavMesh *loadAll(const std::string& path)
  11.         {
  12.                 FILE* fp = fopen(path.c_str(), "rb");
  13.                 if (!fp) return 0;
  14.        
  15.                 // Read header.
  16.                 NavMeshSetHeader header;
  17.                 fread(&header, sizeof(NavMeshSetHeader), 1, fp);
  18.                 if (header.magic != NAVMESHSET_MAGIC)
  19.                 {
  20.                         fclose(fp);
  21.                         return 0;
  22.                 }
  23.                 if (header.version != NAVMESHSET_VERSION)
  24.                 {
  25.                         fclose(fp);
  26.                         return 0;
  27.                 }
  28.        
  29.                 dtNavMesh* mesh = dtAllocNavMesh();
  30.                 if (!mesh)
  31.                 {
  32.                         fclose(fp);
  33.                         return 0;
  34.                 }
  35.                 dtStatus status = mesh->init(&header.params);
  36.                 if (dtStatusFailed(status))
  37.                 {
  38.                         fclose(fp);
  39.                         return 0;
  40.                 }
  41.                
  42.                 // Read tiles.
  43.                 for (int i = 0; i < header.numTiles; ++i)
  44.                 {
  45.                         NavMeshTileHeader tileHeader;
  46.                         fread(&tileHeader, sizeof(tileHeader), 1, fp);
  47.                         if (!tileHeader.tileRef || !tileHeader.dataSize)
  48.                                 break;

  49.                         unsigned char* data = (unsigned char*)dtAlloc(tileHeader.dataSize, DT_ALLOC_PERM);
  50.                         if (!data) break;
  51.                         memset(data, 0, tileHeader.dataSize);
  52.                         fread(data, tileHeader.dataSize, 1, fp);
  53.                
  54.                         mesh->addTile(data, tileHeader.dataSize, DT_TILE_FREE_DATA, tileHeader.tileRef, 0);
  55.                 }
  56.        
  57.                 fclose(fp);
  58.        
  59.                 return mesh;
  60.         }

  61. private:
  62.         // By reference only, no memory consumption
  63.         static dtNavMesh *m_navMesh;
  64.                   
  65.         static dtNavMeshQuery* m_navQuery;

  66.         static dtQueryFilter m_filter;

  67.         static dtStatus m_pathFindStatus;
  68. };
複製代碼
Error        3        error LNK2001: unresolved external symbol "private: static class dtNavMesh * NavMeshLoader::m_navMesh" (?m_navMesh@NavMeshLoader@@0PAVdtNavMesh@@A)        D:\Jacky\Documents\Visual Studio 2010\Projects\PerfectSim\PerfectSim\PerfectSim\main.obj        PerfectSim
Error        2        error LNK2001: unresolved external symbol "private: static class dtNavMeshQuery * NavMeshLoader::m_navQuery" (?m_navQuery@NavMeshLoader@@0PAVdtNavMeshQuery@@A)        D:\Jacky\Documents\Visual Studio 2010\Projects\PerfectSim\PerfectSim\PerfectSim\main.obj        PerfectSim

果堆Member都冇Definition...
係cpp度加番
dtNavMesh * NavMeshLoader::m_navMesh;
dtNavMeshQuery* NavMeshLoader::m_navQuery;
[...]

Recast/Detour 好野來架~

TOP

Thanks, it's the right answer

TOP