问题
When I try to build "priority_queue_example.cpp" it get these warnings(and so errors) pointing to "priority_queue_example.h" on the line where my priority_queue is declared. The warnings are,
1> priority_queue_example.cpp
1>c:\Projects\lib\boost\boost\heap\detail\stable_heap.hpp(102): error C2220: warning treated as error - no 'object' file generated
1>c:\Projects\lib\boost\boost\heap\detail\stable_heap.hpp(102): warning
C4100: 'rhs' : unreferenced formal parameter
1> c:\Projects\lib\boost\boost\heap\detail\stable_heap.hpp(102) : while compiling class template member function 'boost::heap::detail::size_holder<false,size_t>::size_holder(const boost::heap::detail::size_holder<false,size_t> &)'
1> c:\Projects\lib\boost\boost\heap\detail\stable_heap.hpp(189) : see reference to function template instantiation 'boost::heap::detail::size_holder<false,size_t>::size_holder(const boost::heap::detail::size_holder<false,size_t> &)' being compiled
1> c:\Projects\lib\boost\boost\heap\detail\stable_heap.hpp(151) : see reference to class template instantiation 'boost::heap::detail::size_holder<false,size_t>' being compiled
1> c:\Projects\lib\boost\boost\heap\priority_queue.hpp(65) : see reference to class template instantiation 'boost::heap::detail::heap_base<T,myObjectPtrCompare,false,unsigned __int64,false>' being compiled
1> with
1> [
1> T=myObject *
1> ]
1> c:\Projects\priority_queue_example.h(193) : see reference to class template instantiation 'boost::heap::priority_queue<myObject *,boost::heap::compare<myObjectPtrCompare>,boost::parameter::void_,boost::parameter::void_,boost::parameter::void_>' being compiledcompare<ObjectPtrCompare>,boost::parameter::void_,boost::parameter::void
My priority_queue is declared as,
mutable boost::heap::priority_queue<myObject*, boost::heap::compare<myObjectPtrCompare> > hp;
I'm not sure what this means. Can I fix this?
This is my comparison class defined,
struct myObjectPtrCompare
{
bool operator()(const myObject* lhs, const myObject* rhs) const
{
return (lhs->getProp() < rhs->getProp());
}
};
回答1:
Boost is not warning-free with /W4. That means that there could be spurious warnings, even if your code is corect.
You can disable specific warnings as specified in this article: https://docs.microsoft.com/en-us/visualstudio/ide/how-to-suppress-compiler-warnings
In Solution Explorer, choose the project or source file in which you want to suppress warnings.
On the menu bar, choose View, Property Pages.
Choose the Configuration Properties category, choose the C/C++ category, and then choose the Advanced page.
Perform one of the following steps:
In the Disable Specific Warnings box, specify the error codes of the warnings that you want to suppress, separated by a semicolon.
In the Disable Specific Warnings box, choose Edit to display more options.
Choose the OK button, and then rebuild the solution.
来源:https://stackoverflow.com/questions/47725269/warnings-in-boostpriority-queue