2011-01-15 16 views
0
class node{ 
public: 
    unsigned long long int value; 
    int index; 
}; 


bool comp2(node& a,node& b){ 
    if(a.value < b.value) { return true; } 
    return false; 
} 

vector <node*>llist,rlist; 
sort(llist.begin(),llist.end(),comp2); 

上記のコードは私にいくつかの他の行(コード中の後者)にもある致命的なエラーを与えていましたが、stl :: sort()内の比較関数

bool comp2(node* a,node* b){ 
    assert(a && b && "comp2 - null argument"); 
    if(a->value < b->value){ return true; } 
    return false; 
} 

これに関する理論的根拠はありますか。

ERROR:/usr/include/c++/4.4/bits/stl_algo.h|124|error: invalid initialization of reference of type ‘node&’ from expression of type ‘node* const’|

この場合には、(怒鳴る)もあなたがnode *std::vectorを定義している

using namespace std; 

void rep(int& a,int& b){ 

int c; 
c=a; 
a=b; 
b=c; 

} 

int main(void){ 

int a=3,b=4; 

rep(a,b); 
cout<<a<<" "<<b; 
return 0; 
} 
+0

「奇妙なエラーが」正確には何ですか? –

+0

@ gtk.pro:私はリファクタリングに自由を取った(フォーマットを整理し、メソッドを整理した)。 –

+0

@Matthieu:あなたは間違いなく、コード良く行われていないが、それはさらに良く持っていたされていたであろうIMHOあなたはそのままのコードを残し、答えとして、あなたのリファクタリングを投稿(はい、オフトピックが、そのような修正が一般的に受け入れられています)。これにより、*なぜ*あなたがリファクタリングを行うかを説明する機会が与えられます。 –

答えて

5

を動作するはずです上記その後、動作します。したがって、すべての要素はnode *であり、ベクトルが実行するすべての操作はnode *になります。 sortに異なるタイプの比較関数を与えることはできません。

+0

私は*あなたが使用する必要はありません関数定義のタイプ&Aを使用すると、すべての場所の関数であなたは、単に –

+0

@gkt(* Aと同じ意味)を使用できることをどこかで聞いたことがある:私はあなたが間違って聞いて怖いです!参照とポインタはかなり似た目的を果たしますが、それらは互換性がありません。 –

+0

私の質問の最後に追加した新しいプログラムを見てみましょう。 –

3

ベクトルにはnode*型の値が含まれているという合理的な点があるため、比較関数はタイプnode*の値を比較する必要があります。あなたはおそらく最初の場所で言うことを意味したもの

3

vector<node>ました。ノードへのポインタが必要な場合は、2番目の比較関数が妥当です。

関連する問題