2011-02-28 52 views
0

我有一個類AudioDeviceManager,通過引用傳遞一個std :: vector作爲AudioAnalyzer類。簡單的指針問題(在不同的類之間共享一個向量)

我希望其他對象能夠訪問此向量(傳遞給AudioAnalyzer類)。要做到這一點,我在AudioAnalyzer類創建的指針:

std::vector<float> *pointer; 

我創建一個getter使用Objective-C的屬性它。 當我在相同的類中,我似乎可以訪問它細並將它傳遞給其他的目的(通過引用)

NSLog(@"%i", [self pointer]); 
det->process(time, *[self pointer]); 

然而,我似乎無法從另一個類訪問它,頻譜 我初始化這個頻譜類與方法調用(fft_data也是一個指向一個std ::矢量)

- (id) initWithDataVec:(std::vector<float>*)address { 
... 
fft_data = address; 
... 

NSLog(@"value: %i", fft_data);但返回0

寫作`的NSLog(@ 「值:%I」,& fft_data)返回ns什麼似乎是一個有效的地址。但是,這不是指針的地址嗎?

我不確定我的代碼是否正確。我正在尋找一種方法來「分享」不同類別中的單個媒介。理想情況下,一個類將接收到一個指向它們可以隨時訪問的向量的指針,而不必擁有另一個類所調用的函數。

+0

你如何用std :: vector 指針調用initWithDataVec?我建議你使用「%p」而不是「%i」作爲NSLog格式的指針。 – 2011-02-28 20:53:23

+0

std :: vector * toData = [分析指針]; \t spectrum = [[Spectrum alloc] initWithDataVec:toData]; – Edgar 2011-02-28 21:15:09

回答

0

你不能只傳遞(通過引用)相同的std :: vector的同一個實例到所有需要它的類的構造函數?

+0

這不會讓我的設計緊密結合嗎?我有一個「頻譜」類,可以繪製當前正在播放的音頻的頻譜顯示... AudioAnalyzer必須知道此類將其矢量傳遞給其構造函數。 – Edgar 2011-02-28 20:39:07

+0

是的,更好的方法是創建一個獨立的構建器類/函數來設置所有對象,並將正確的對象傳遞給依賴對象的構造函數。通過這種方式,所有班級都可以在不需要了解彼此內部細節的情況下獲得所需內容您也可以使用它在測試代碼中傳遞對象的模擬/測試版本以方便單元測試。這項技術被稱爲依賴注入,嘗試谷歌搜索。 – Tim 2011-02-28 20:43:58