これはこのウェブサイトの最初の投稿です。私はC++でハッシュテーブルをコーディングするプロジェクトに参加しています。私は関数ポインタに問題があります。C++ - 関数ポインタ付きハッシュテーブル
私はハッシュテーブルを持っています。このハッシュテーブルには、いくつかの学生(学生の番号で識別される)が含まれています。私はパラメータでハッシュを渡すために関数ポインタを使う必要があります。
私のコードは下にある:
//file main.cpp
Table t1;
unsigned int(Table::* ptrHash)(unsigned int);
ptrHash = &Table::hash;
t1.insertStudent(11507461, 20, ptrHash);
// file Table.cpp
void Table::insertStudent(unsigned int numberStudent, unsigned int (*f)(unsigned int)) {...}
unsigned int Table::hash(unsigned int cleEtu) {...}
//file Table.h
void insertStudent(unsigned int numberStudent, unsigned int (*f)(unsigned int));
unsigned int hash(unsigned int numberStudent);
私のプロンプトが私にこのエラーを与える:
no matching function for call to 'Table::insertStudent(int, unsigned int (Table::*&)(unsigned int))' t1.insererEtu(11507461, 20, ptrHachage);
note:no known conversion for argument 3 from ‘unsigned int (Table::*)(unsigned int)’ to ‘unsigned int (*)(unsigned int)’
私はそれはそれのために同じではないのですが、私はそれを解決する方法を知らないことを理解しています。私はたくさんの方法を試していますが、誰も仕事をしていません。
誰かが私を助けることができるなら、それは私を助けるでしょう!
メンバ関数のポインタ型は、通常のポインタ型とは異なります。これは '(*)'だけでなく、 'Table :: *'を見る理由です。いずれかメンバー関数を非メンバー関数ポインタにする方法を見つけるか、ハッシュテーブルにメンバー関数ポインタを使用するほうがよいでしょう。 – AndyG
ハッシュ関数をメンバー関数ではなく自由関数として定義します。 (関数ポインタを渡すポイントは、関数がハッシュテーブルから独立しているということです)。しかし、挿入のたびに異なるハッシング関数を使うと、コンストラクタに関数ポインタを渡す方が合理的です。 – molbdnilo
[mcve]も提供してください。さもなければ、この質問は閉鎖される可能性が高いです。 – AndyG