2011-01-03 27 views
4

一般的なリストを実装しましたが、リスト内の特定の位置からデータを取得しようとしています。 umm ...しかし、私はエラーを取得しています: 'List :: retrieve(int &、Record &)'の呼び出しで一致する関数がありません。 以下は、main.cppのコードとList.hからの関数のスニペットです。 #include完全なコードについてはクラスメンバーに一致する関数呼び出しがありません

MAIN.CPP

#include <iostream> 
#include "List.h"  
#include "Key.h" 
using namespace std; 
typedef Key Record; 
int main() 
{ 
    int n; 
    int p=3; 
    List<int> the_list; 
    Record data; 
    cout<<"Enter the number of records to be stored. "<<endl; 
    cin>>n; 
    for(int i=0;i<n;i=i++) 
    { 
    the_list.insert(i,i); 
    } 
    cout<<the_list.size(); 
    the_list.retrieve(p, data); 
    cout<<"Record value: "<<data; 
    return 0; 
} 

List.h

Error_code retrieve(int position, List_entry &x)const 
    { 
    if(empty()) return underflow; 
    if(position<0 || position>count) return range_error; 
    x=entry[position]; 
    return success; 
    } 

MAIN.CPP:http://pastebin.com/UrBPzPvi

List.h:私はちょうど基礎を学んでいますし、コードが大規模な再利用可能なモジュールに関してで完璧ではないかもしれないhttp://pastebin.com/7tcbSuQu

P.S。この段階では、機能するだけです。あなたはretrieveに2番目の引数として渡ししようとしている

おかげ

答えて

6

dataは、タイプRecordです。

retrieveの第2パラメータはList_entryであり、Recordではありません。

コンパイラで「一致する関数がありません」と表示されるのは、通常、使用した名前の関数が見つかりましたが、その関数に渡そうとしている引数のうちの1つ以上が間違った型間違った数の引数を関数に渡そうとしています。

+0

ummm ...ありがとうございました。どのように私は私の投稿で上記のように使用することができるようにリストの検索機能を変更する必要がありますか? – Cipher

+0

@user:パラメータのタイプを変更するか、 'data'のタイプを変更しますか? –

1

「コール[...]の一致機能がありません」というエラーは、通常、「次の引数で呼び出せる関数が見つかりません」という意味です。これは多くのことを意味する可能性があります - 関数名のスペルを間違っているか、引数が間違った型のものか、constオブジェクト以外の関数をconstオブジェクトなどで呼び出そうとしています。通常、エラーはコールサイトで実際に見つかった引数のタイプとともに、マッチングを試みた関数を含め、何がうまくいかなかったかについての詳細を示します。テンプレートを使用すると、これを読みにくくすることができますが、少し時間を取って通常はそれらを読むことができます。

このコードに関して、リトリーブ関数の2番目の引数は、ListのテンプレートパラメータであるList_entry型です。あなたのメイン関数ではListをインスタンス化するので、List_entryはこの場合intです。しかし、レコードを調べようとしていますが、これはintではありません。 intを検索しようとするコードを変更するか、ListをListにすると、この問題は解決されます。

希望すると便利です。

+0

私はレコードがint型であると思います。クラスKeyに別名を記録しました。あなたが指摘できれば、Keyクラスのコードがあります。 Key.h-> http://pastebin.com/zMVRj2TrとKey.cpp - > http://pastebin.com/NuCyeBpj – Cipher

+0

ああ...あなたのKeyクラスが(内部的にはそれが実装されている方法で)整数をラップすることに注意してください。しかし、/ itは整数ではありません。それはint型とは根本的に異なる型を持つKey型のクラスです。 intからKeyへの暗黙的な変換(Key(int x = 0)コンストラクタ経由で)を定義しましたが、暗黙的にKeyからintに変換する方法はありません。コードを動作させるには、the_list.retrieve(p、data);を変更します。 the_list.retrieve(p、data.the_key())を読む。これは、キーの整数部分を関数に渡します。関数を修正する必要があります。 – templatetypedef

+0

私はそれをthe_lsit.retrieve(p、data.the_key())に変更しました。しかし、私はまだこのエラーが発生しています: 'List :: retrieve(int&、int)'への呼び出しに一致する関数がありません – Cipher

関連する問題