2

私はこれを理解したと思っていましたが、間違っていたと思います。'<...>' の最初の要素はキューに格納される型で、2 番目はコンテナーの型 (選択肢は 'vector' または 'dequeue') であり、3 番目の要素は次のような印象を受けました。比較のために「()」演算子をオーバーロードするクラスです。これに基づいて、次のコードはコンパイルする必要があると思いますが、コンパイルしません:(

std::priority_queue<uint32_t*, std::vector<uint32_t*>, edgeComparator> q();

uint32_t* nodeEdge = new uint32_t[2];
nodeEdge[0] = startN;
nodeEdge[1] = 0;

q.push(nodeEdge);

「edgeComparator」は次のように定義されます。

class edgeComparator
{
   public:
      bool operator() (const uint32_t*& lhs, const uint32_t*& rhs) const
      {
         return (lhs[1]>rhs[1]);
      }
};

ここに私が得ているエラーがあります:

./Graph.cpp: In member function `void Graph::findShortestPath()':
./Graph.cpp:148: error: request for member `push' in `q', which is of non-class type `std::priority_queue<uint32_t*, std::vector<uint32_t*, std::allocator<uint32_t*> >, edgeComparator> ()()'

さらに悪いことに、「q.empty()」を試したときにもこのエラーが発生します

./Graph.cpp:150: error: request for member `empty' in `q', which is of non-class type `std::priority_queue<uint32_t*, std::vector<uint32_t*, std::allocator<uint32_t*> >, edgeComparator> ()()'
4

1 に答える 1

5

持っていた:

std::priority_queue<uint32_t*, std::vector<uint32_t*>, edgeComparator> q();

ただし、代わりに次を使用する必要があります。

std::priority_queue<uint32_t*, std::vector<uint32_t*>, edgeComparator> q;

最初のバージョンは、引数をとらない、という名前の関数を宣言し、タイプの値を返します。qstd::priority_queue<...>

2番目のバージョンは、デフォルトで初期化されるタイプの、という名前の変数を宣言します。qstd::priority_queue<...>

于 2012-11-18T04:37:28.930 に答える