2015-04-06 53 views
-2

好吧,我必須保持一個地圖一類..範圍和價值存儲問題與地圖

#pragma once 
#include "Member.h" 
class MapDetails 
{ 
public: 
    typedef map<int, Member*> MyMap; 
    typedef pair<int,Member*> MyPair; 
    MyMap myMap; 

    MapDetails(void); 
    MapDetails(const MapDetails& obj); 
public: 
    ~MapDetails(void); 
    //MyMap returnMap(); 
}; 

在各種其他類我插入和刪除,並從它的更新值。 要訪問myMap我試圖繼承這個類到我的其他類。但是其他一類的變化並不反映。可能是因爲正在創建myMap的新副本。我該如何阻止?使用static關鍵字會導致鏈接器錯誤。我不想用extern使用全局變量。我是新的C++ :(請幫我

+0

還是有什麼更好的方法來實現這一目標? :( – DeepN 2015-04-06 11:25:47

+2

顯示的不工作,你所期望的方式事一些代碼示例。 – molbdnilo 2015-04-06 11:26:11

+0

不會有那些任何更多的幫助。他們是簡單的類被使用「MYMAP」插入值內,或他們對迭代顯示的值。 – DeepN 2015-04-06 11:28:29

回答

1

可以很容易地解決靜態成員的鏈接錯誤,只是把一個定義相應的.cpp文件或同一翻譯單元。

class MapDetails 
{ 
    ... 
    static MyMap myMap; 
    ... 
}; 

,並在該.cpp文件放:

MapDetails::MyMap MapDetails::myMap; 
+0

你剛纔救了我......非常感謝你:) – DeepN 2015-04-06 11:38:44

2

首先設計一個類決定它是否意味着是這樣一個值對象(封裝的數據,並改變其方法的類),或者如果它要成爲前使用了一個這是一種通過多態性(靜態或動態)等手段在稍後時間擴展行爲的方式。

在上面的例子中,它看起來像你想,因爲你只想映射樣的行爲來使用這個類像一個值對象,你想這個類類的單個對象是多種其他類訪問。有多種方式/模式可以做到這一點,並使您的地圖對象靜態(單身模式)只是一種方式。它並不是很受歡迎,但情況應該決定它的使用而不是偏見。就像評論中提到的那樣,如果您提供更多的代碼示例,我們將能夠進一步幫助您。

至於你用static聲明得到鏈接錯誤可能是ncause你沒有爲類定義這是一個常見的錯誤是新手讓外面的靜態成員變量提供了一個定義。

+0

是的..這是一個新手的錯誤:(...謝謝.. +1「這個答案很有用」 – DeepN 2015-04-06 11:40:25