2016-03-02 179 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++)