重複の可能性:
内部クラスはプライベート変数にアクセスできますか?
したがって、優先キューを使用しようとしています。このキューのコンテキストで、D [i] <D [j]の場合、整数iを別の整数jよりも「小さい」と定義します。これどうやってするの?(Dはオブジェクトのデータメンバーです)
これまでのところ私は
/* This function gets the k nearest neighbors for a user in feature
* space. These neighbors are stored in a priority queue and then
* transferred to the array N. */
void kNN::getNN() {
int r;
priority_queue<int, vector<int>, CompareDist> NN;
/* Initialize priority queue */
for (r = 0; r < k; r++) {
NN.push(r);
}
/* Look at the furthest of the k users. If current user is closer,
* replace the furthest with the current user. */
for (r = k; r < NUM_USERS; r++) {
if (NN.top() > r) {
NN.pop();
NN.push(r);
}
}
/* Transfer neighbors to an array. */
for (r = 0; r < k; r++) {
N[r] = NN.top();
NN.pop();
}
}
そしてkNN.hhで:
class kNN {
private:
struct CompareDist {
bool operator()(int u1, int u2) {
if (D[u1] < D[u2])
return true;
else
return false;
}
};
...
しかし、これは私にエラーを与えています
kNN.hh: In member function ‘bool kNN::CompareDist::operator()(int, int)’:
kNN.hh:29: error: invalid use of nonstatic data member ‘kNN::D’
これについて私は何ができますか?コンパレータで特定のオブジェクトを参照する場合、C ++はそれを好まないようですが、Dを参照せずにこれを解決する方法がわかりません。
ありがとう!