我在C++類中有一個靜態stl映射,並有另一個靜態成員函數來返回一個指向地圖中對象的常量指針。該映射對類中的所有對象都是通用的。從另一個類訪問靜態成員函數
唯一的問題是,我需要搜索此映射並將其從另一個類中進行設置,該類位於不同的.cpp/.h文件中,並且當我嘗試在vs2010中編譯它們時會得到未解析的外部符號。這些方法在Timestream類中定義爲
static void setRoomList(std::map<std::string, RoomDescription> rl);
static RoomDescription * getRoom(std::string ref);
這兩個函數都是公共的,所以應該沒有訪問問題。這些功能在Timestream.cpp文件即定義爲正常,
RoomDescription * Timestream::getRoom(std::string ref)
{
std::map<std::string, RoomDescription>::iterator cIter= roomList.find(ref);
if(cIter!=roomList.end())
return &(cIter->second);
return NULL;
}
我試圖從其他類調用這個像
RoomDescription *r =Timestream::getRoom("Bathroom")
。網上的其他帖子似乎談論使用extern,但我不確定。我不明白爲什麼這應該是從另一個類別調用任何其他成員函數有什麼不同?
謝謝, 詹姆斯
編輯: 是的,我已經聲明
std::map<std::string, RoomDescription> roomList;
在Timestream.cpp文件的頂部。在頭它定義爲
static std::map<std::string, RoomDescription> roomList;
我已經包括RoomDescription類中的我試圖調用這些方法的報頭中的標頭。
我得到的錯誤是這個
Import.obj:錯誤LNK2019:無法解析的外部符號「市民:靜態無效__cdecl Timestream :: setRoomList(類的std ::地圖,一流的std ::分配器> class RoomDictList,struct std :: less,class std :: allocator >>,class std :: allocator,class std :: allocator> const,class RoomDescription>>>)「(?setRoomList @ Timestream @@ SAXV?$ map @ V'$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@ VRoomDescription @@ U&$ @少V'$ basic_string的@ DU?$ char_traits @ d @ STD @ @V?$分配器@ d @ @@ 2 STD @@@ 2 @ V'$分配器@ U&$對@ $$ CBV?$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ 2 @@ std @@ VRoomDescription @@@ std @@@ 2 @@ std @@@ Z)在函數「public:int __thiscall Import :: getRoomData(void) 「(?getRoomData @ Import @@ QAEHXZ)
Timestream.obj:error LNK2001:無法解析的外部符號」private:static class std :: map,class std :: allocator>,RoomDescription,struct std :: less, class std :: allocator>>,class std :: allocator,class std :: allocator> const,class RoomDescription>>> Timestream :: roomList「(?roomList @ Timestream @@ 0V?$ map @ V $ basic_string @ DU ?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@ VRoomDescription @@ U&$ @少V'$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@@ 2 @ V'$分配器@ U&$ @配對$$ CBV?$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @ @VRoomDescription @@@ STD @@@ 2 @@ STD @@ A)
可能您沒有在.cpp文件中定義roomList變量。無論如何,顯示確切的代碼和錯誤信息。 –
可能重複(也許):http://stackoverflow.com/questions/7092765/what-does-it-mean-to-have-an-undefined-reference-to-a-static-member – Mankarse
setRoomList定義在哪裏? –