2016-03-02 241 views
0

在我的主要,我稱爲函數compute_entropy,我給它一個這樣的載體: float entropy = h.compute_entropy(input_pic [0],& Symbol_table);指針和通過引用傳遞C++

在實現函數本身(在h.cpp中),我不應該改變它所需要的參數vector * prob ..我怎樣才能訪問prob的數據?

float compute_entropy(vector<Symbol>* prob) 
{ 

    float ent = 0; 
    vector<Symbol>* prob; 


    for (int i = 0; i < prob.size(); i++) //GIVES ERROR 
    { 
     ent += (prob.at(i).freq) * log2( 1/(prob.at(i).freq) ); 
    } 
} 
+0

@MohitJain肯定的,但prob.at()和prob.size()給出了錯誤,因爲概率的聲明一個指向矢量的指針而不是矢量本身 – Maram

+0

爲什麼你在本地聲明'prob'。這已經是一個功能的論點。理想情況下,在調用main函數時,應該使用'float compute_entropy(const vector &prob)' –

+0

@MohitJain ..我怎樣才能傳遞參數? compute_entropy(&Symbol_table)?? – Maram

回答

3

因爲prob類型是Vector<Symbol> *,你真正需要取消對它的引用,請首先訪問成員之前。它看起來像(*prob).at(i).freq

*(A).B也可以寫成A->B,所以不是(*prob).at(i).freq,你可以寫prob->at(i).freq。 (有類似的說法prob.size()成爲prob->size()

以清潔的方式
這樣做,因爲你永遠不改變你的向量的內容可以使爭論不斷。現在

float compute_entropy(const vector<Symbol>* prob) 

,因爲我們知道指針是邪,讓我們來代替指針與reference

float compute_entropy(const vector<Symbol> &prob) 
{ 

    float ent = 0; 

    for (int i = 0; i < prob.size(); i++) //GIVES ERROR 
    { 
     ent += (prob.at(i).freq) * log2( 1/(prob.at(i).freq) ); 
    } 
} 

雖然調用這個,如果你用向量調用,從參數刪除&,如果你用一個向量指針調用,取消對它的引用與*

0
vector<Symbol>* prob;  
for (int i = 0; i < prob.size(); i++) //GIVES ERROR 
..... 

因爲概率是一個指針,你需要使用 - >操作

for (int i = 0; i < prob->size(); i++)