2014-12-19 79 views
-1
class A{ 
    static queue x; 
    void operateOnQueue() 
    { 
     x.push(something); 
    } 
} 

class B{ 
    void getOtherClassQueueSize() 
    { 
     A *a= new A(); 
     cout<<a->x.size()<<endl; \\ size of queue is 1 
     // OR alternatively 
     cout<<A::x.size()<<endl; 
     delete(a); 
    } 
} 

如何在getOtherClassQueueSize()中的類B中訪問相同的A類隊列而不將其設爲靜態?沒有把它變成靜態的,我會得到size = 0.有沒有解決方法?從另一個類訪問類的變量而不使第一類變爲靜態

這些函數在線程中運行以保持並行性。另一種方法是傳遞函數參數,但我試圖避免它。

+0

你的'A類'不是靜態的,而是'x'成員。你在問題中有答案。 – harper 2014-12-19 11:56:40

+1

請您發佈*代碼*。關鍵字'Class'不存在。 – harper 2014-12-19 11:58:51

+1

'\\ size是1'是什麼意思?順便說一句:這是無效的C++語法。這個「東西」來自哪裏? – Wolf 2014-12-19 12:12:46

回答

0

如何不使x靜態? 然後如果公衆可以直接通過指針訪問它,如:

//assume 'a' points to an object who's stack has already been filled somewhere else, then: 
cout << a->x.size(); //prints the size of member 'x' of 'a' 

,或者你可以把它私有,如果靜態不是一種選擇暴露的getter/setter或其他修飾

0

,你有通過A實例訪問隊列,使用引用或指向隊列的單個實例的初始化類A的obj是可能的。您也可以嘗試填充一個映射,其中鍵以某種方式從該類型派生而每個類型的單個實例是該值。

的兩個例子包括原始如下所示:online example

簡而言之:

初始化類A的OBJ的與參考或一個指向該隊列的單個實例:

std::deque<int> global_x; 
struct Anew{ 
    std::deque<int>& x; 
    Anew() : x(global_x) {} 
}; 

填寫密鑰以某種方式從類型和每種類型的單個實例派生的地圖是值:

std::map<int, std::deque<int> > mapxs; 
struct Anew2{ 
    enum { type_as_int_so_no_rtti_is_needed = 1 }; 
    std::deque<int>& x; 
    Anew2() : x(mapxs[type_as_int_so_no_rtti_is_needed]) {} 
};