0

私は私のファイルの上部にこれらを持っています:

#include <queue>

typedef struct cell_s {
    unsigned int x;
    unsigned int y;
    unsigned int ambiguity = 9;
} cell_t;

// so the priority_queue can sort the structs:
bool operator<(const cell_t &a, const cell_t &b) {
    return a.ambiguity < b.ambiguity;
}

同じファイルで、次のように、priority_queueをクラスのプライベートメンバーとして宣言しました。

priority_queue<cell_t> blankCellQueue;

次に、これらの行を含む同じクラスのメンバー関数があります。

cell_t cell;
cell.x = x;
cell.y = y;
blankCellQueue.push(cell);

しかし、Xcodeは私が共有した最後の行にこの警告を表示しています:

「'push'を呼び出すための一致するメンバー関数がありません」。

4

3 に答える 3

2

priority_queue名前空間の一部ですstd。を使用する必要がありますstd::priority_queue

于 2013-02-28T20:24:11.730 に答える
1

時間を無駄にしてすみません。問題を見つけました。priority_queueは私のクラスのメンバーです。私がpriority_queueを編集しようとした関数は、最初にキューなしで記述したときにクラス変数を変更する必要があるとは予想していなかったため、constとしてマークしたメンバー関数でした。constメンバー関数からメンバーオブジェクトへのプッシュを呼び出すことは、明らかにノーノーです。Xcodeが少し便利なエラーメッセージを表示してくれればよかったのですが...「const関数から呼び出された非const関数」に沿った何かが非常に役立つメッセージになります。

メンバー関数宣言を提供していなかったので、ここでそれを指摘するのは非常に困難でした。

ヘルプの提供をありがとう!

于 2013-03-01T04:48:37.697 に答える
1

C ++ 11std::priority_queueは標準のコンテナアダプタであり、メンバー関数がありますpush()。リンクされたリファレンスを参照してください。

ただし、C++標準ライブラリの実装が準拠していない可能性があります。最新バージョンにアップグレードする必要があります。

ここでコードのコンパイルを確認できます。std::前に名前空間修飾子を追加する必要priority_queueがありましたが、ここでの問題の根本的な原因であるとは思われません。もしそうなら、あなたのコンパイラエラーは異なっているはずです(またはあなたは前に他のエラーを受け取るはずです)。

于 2013-02-28T20:25:58.383 に答える