Мне удалось преодолеть (как представляется,) большинство начальных проблем, но из-за того, что некоторые из моих ответов были получены от вопросов других людей (без ответа), я не уверен, что я иду в правильном направлении. Я работаю с бустом изменяемая очередь и у меня возникли некоторые проблемы при компиляции.
Мой код в таком виде:
typedef struct _MyComparator
{
bool operator() (const PriorityStruct* arg1, const PriorityStruct* arg2) const
{
return arg1->key < arg2->key;
}
} MyComparator;
class PriorityQueue
{
typedef PriorityStruct* entry;
typedef boost::typed_identity_property_map<entry> prop_map;
typedef boost::mutable_queue<entry, std::vector<entry>, MyComparator, prop_map> priority_queue_notAmb;
priority_queue_notAmb* pq;
boost::mutex mut;
public:
PriorityQueue(void);
}
PriorityQueue::PriorityQueue()
{
pq = new priority_queue_notAmb(sizeof(entry)*2, MyComparator(), prop_map());
PriorityStruct* ps = new PriorityStruct;
pq->push(ps);
}
Когда я удаляю последнюю строку, pq-> push (ps), код компилируется и запускается при создании нового типа PriorityQueue. На самом деле, я получаю ошибки, которые мешают его компиляции.
И мои ошибки:
1>------ Build started: Project: PriorityQueue, Configuration: Debug x64 ------
1> PriorityQueue.cpp
1>C:\boost\boost\pending\mutable_queue.hpp(94): error C2679: binary '[' : no operator found which takes a right-hand operand of type 'PriorityQueue::entry ' (or there is no acceptable conversion)
1> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\vector(1119): could be 'const unsigned __int64 &std::vector<_Ty>::operator [](unsigned __int64) const'
1> with
1> [
1> _Ty=size_t
1> ]
1> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\vector(1135): or 'unsigned __int64 &std::vector<_Ty>::operator [](unsigned __int64)'
1> with
1> [
1> _Ty=size_t
1> ]
1> while trying to match the argument list '(std::vector<_Ty>, PriorityQueue::entry )'
1> with
1> [
1> _Ty=size_t
1> ]
1> C:\boost\boost\pending\mutable_queue.hpp(91) : while compiling class template member function 'void boost::mutable_queue<IndexedType,RandomAccessContainer,Comp,ID>::push(const IndexedType &)'
1> with
1> [
1> IndexedType=PriorityQueue::entry,
1> RandomAccessContainer=std::vector<PriorityQueue::entry>,
1> Comp=MyComparator,
1> ID=PriorityQueue::prop_map
1> ]
1> PriorityQueue.cpp(7) : see reference to function template instantiation 'void boost::mutable_queue<IndexedType,RandomAccessContainer,Comp,ID>::push(const IndexedType &)' being compiled
1> with
1> [
1> IndexedType=PriorityQueue::entry,
1> RandomAccessContainer=std::vector<PriorityQueue::entry>,
1> Comp=MyComparator,
1> ID=PriorityQueue::prop_map
1> ]
1> PriorityQueue.cpp(5) : see reference to class template instantiation 'boost::mutable_queue<IndexedType,RandomAccessContainer,Comp,ID>' being compiled
1> with
1> [
1> IndexedType=PriorityQueue::entry,
1> RandomAccessContainer=std::vector<PriorityQueue::entry>,
1> Comp=MyComparator,
1> ID=PriorityQueue::prop_map
1> ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Любая помощь будет принята с благодарностью, так как я не смог найти много информации об этом относительно того, как она используется.
Изменить: В качестве дополнительного теста я добавил
cout << (pq->empty() ? "YES" : "NO") << endl;
чтобы увидеть, случилось ли что-нибудь странное. Он печатает «ДА» каждый раз. Я заменил pq-> push на это, но сохраню это как обновленную заметку, если я не получу один или два комментария с просьбой сделать иначе для удобства чтения.
Задача ещё не решена.
Других решений пока нет …