Segmentation Fault gcc-4.9.1.RHEL6.4/include/c++/4.9.1/backward/auto_ptr.h:184 - boost

I am using Boost 1.56.0 for its dijkstra_shortest_paths in a c++ program (redhead 4.9.1, std = c++11). Somehow, I keep getting the following segmentation fault error in auto_ptr.h: 184
Program received signal SIGSEGV, Segmentation fault.
std::auto_ptr<boost::property<boost::edge_weight_t, double, boost::no_property> >::operator* (this=) at /opt/devl/optimize/gcc-4.9.1.RHEL6.4/include/c++/4.9.1/backward/auto_ptr.h:184
(gdb) bt
#0 std::auto_ptr<boost::property<boost::edge_weight_t, double, boost::no_property> >::operator* (this=) at /opt/devl/optimize/gcc-4.9.1.RHEL6.4/include/c++/4.9.1/backward/auto_ptr.h:184
#1 boost::detail::sep_<unsigned long, boost::property<boost::edge_weight_t, double, boost::no_property> >::get_property (this=) at /usr/include/boost/graph/detail/adjacency_list.hpp:278
#2 boost::detail::out_edge_iter<std::_List_iterator<boost::detail::sep_<unsigned long, boost::property<boost::edge_weight_t, double, boost::no_property> > >, unsigned long, boost::detail::edge_desc_impl<boost::directed_tag, unsigned long>, long>::dereference (this=) at /usr/include/boost/graph/detail/adjacency_list.hpp:152
#3 boost::iterator_core_access::dereference<boost::detail::out_edge_iter<std::_List_iterator<boost::detail::sep_<unsigned long, boost::property<boost::edge_weight_t, double, boost::no_property> > >, unsigned long, boost::detail::edge_desc_impl<boost::directed_tag, unsigned long>, long> > (f=...) at /usr/include/boost/iterator/iterator_facade.hpp:516
#4 boost::iterator_facade<boost::detail::out_edge_iter<std::_List_iterator<boost::detail::sep_<unsigned long, boost::property<boost::edge_weight_t, double, boost::no_property> > >, unsigned long, boost::detail::edge_desc_impl<boost::directed_tag, unsigned long>, long>, boost::detail::edge_desc_impl<boost::directed_tag, unsigned long>, boost::bidirectional_traversal_tag, boost::detail::edge_desc_impl<boost::directed_tag, unsigned long>, long>::operator* (this=) at /usr/include/boost/iterator/iterator_facade.hpp:634
#5 boost::breadth_first_visit<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, double, boost::no_property>, boost::no_property, boost::listS>, boost::d_ary_heap_indirect<unsigned long, 4ul, boost::iterator_property_map<unsigned long*, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long>, unsigned long, unsigned long&>, int*, std::less<int>, std::vector<unsigned long, std::allocator<unsigned long> > >, boost::detail::dijkstra_bfs_visitor<boost::dijkstra_visitor<boost::null_visitor>, boost::d_ary_heap_indirect<unsigned long, 4ul, boost::iterator_property_map<unsigned long*, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long>, unsigned long, unsigned long&>, int*, std::less<int>, std::vector<unsigned long, std::allocator<unsigned long> > >, boost::adj_list_edge_property_map<boost::directed_tag, double, double const&, unsigned long, boost::property<boost::edge_weight_t, double, boost::no_property> const, boost::edge_weight_t>, unsigned long*, int*, boost::closed_plus<int>, std::less<int> >, boost::two_bit_color_map<boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long> > > (g=..., s=0, Q=..., vis=..., color=...) at /usr/include/boost/graph/breadth_first_search.hpp:77
#6 boost::dijkstra_shortest_paths_no_init<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, double, boost::no_property>, boost::no_property, boost::listS>, boost::dijkstra_visitor<boost::null_visitor>, unsigned long*, int*, boost::adj_list_edge_property_map<boost::directed_tag, double, double const&, unsigned long, boost::property<boost::edge_weight_t, double, boost::no_property> const, boost::edge_weight_t>, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long>, std::less<int>, boost::closed_plus<int>, int, boost::two_bit_color_map<boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long> > > (g=..., s=0, predecessor=, distance=, weight=..., index_map=...,
compare=..., combine=..., zero=0, vis=..., color=...) at /usr/include/boost/graph/dijkstra_shortest_paths.hpp:332
#7 boost::dijkstra_shortest_paths<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, double, boost::no_property>, boost::no_property, boost::listS>, boost::dijkstra_visitor<boost::null_visitor>, unsigned long*, int*, boost::adj_list_edge_property_map<boost::directed_tag, double, double const&, unsigned long, boost::property<boost::edge_weight_t, double, boost::no_property> const, boost::edge_weight_t>, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long>, std::less<int>, boost::closed_plus<int>, int, int, boost::two_bit_color_map<boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long> > > (g=..., s=0, predecessor=, distance=, weight=..., index_map=...,
compare=..., combine=..., inf=2147483647, zero=0, vis=..., color=...) at /usr/include/boost/graph/dijkstra_shortest_paths.hpp:383
#8 boost::dijkstra_shortest_paths<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, double, boost::no_property>, boost::no_property, boost::listS>, boost::dijkstra_visitor<boost::null_visitor>, unsigned long*, int*, boost::adj_list_edge_property_map<boost::directed_tag, double, double const&, unsigned long, boost::property<boost::edge_weight_t, double, boost::no_property> const, boost::edge_weight_t>, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long>, std::less<int>, boost::closed_plus<int>, int, int, int*, boost::vertex_distance_t, boost::bgl_named_params<unsigned long*, boost::vertex_predecessor_t, boost::no_property> > (g=..., s=0, predecessor=, distance=, weight=...,
index_map=..., compare=..., combine=..., inf=2147483647, zero=0, vis=...) at /usr/include/boost/graph/dijkstra_shortest_paths.hpp:353
#9 boost::detail::dijkstra_dispatch2<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, double, boost::no_property>, boost::no_property, boost::listS>, int*, boost::adj_list_edge_property_map<boost::directed_tag, double, double const&, unsigned long, boost::property<boost::edge_weight_t, double, boost::no_property> const, boost::edge_weight_t>, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long>, boost::bgl_named_params<int*, boost::vertex_distance_t, boost::bgl_named_params<unsigned long*, boost::vertex_predecessor_t, boost::no_property> > > (g=..., s=0, distance=, weight=..., index_map=..., params=...) at /usr/include/boost/graph/dijkstra_shortest_paths.hpp:423
#10 boost::detail::dijkstra_dispatch1<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, double, boost::no_property>, boost::no_property, boost::listS>, int*, boost::adj_list_edge_property_map<boost::directed_tag, double, double const&, unsigned long, boost::property<boost::edge_weight_t, double, boost::no_property> const, boost::edge_weight_t>, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long>, boost::bgl_named_params<int*, boost::vertex_distance_t, boost::bgl_named_params<unsigned long*, boost::vertex_predecessor_t, boost::no_property> > > (g=..., s=0, distance=, weight=..., index_map=..., params=...) at /usr/include/boost/graph/dijkstra_shortest_paths.hpp:455
#11 boost::dijkstra_shortest_paths<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, double, boost::no_property>, boost::no_property, boost::listS>, int*, boost::vertex_distance_t, boost::bgl_named_params<unsigned long*, boost::vertex_predecessor_t, boost::no_property> > (g=..., s=0, params=...)
at /usr/include/boost/graph/dijkstra_shortest_paths.hpp:473
Would greatly appreciate it very much if you could help pointing out what I'm doing wrong.

It looks like somewhere you are using auto_ptr<>.
This type has been deprecated (for the reason that it's hardly possible to use it right and rarely safe). In particular: you can never use it inside standard libraries containers (because it fails readonly copy semantics).
Assuming you really need pointers there (why do you?) you should probably use ptr_vector, ptr_set etc. from the Boost Pointer Container library, or use a modern smart pointer (unique_ptr, value_ptr, scoped_ptr, shared_ptr
)

Related

Can't get to compile comparison of unodered_sets

I have a couple of unordered set defined as:
std::unordered_set<std::reference_wrapper<const T>, MyHash<T>, MyEqual<T>> const &map1;
std::unordered_set<std::reference_wrapper<const T>, MyHash<T>, MyEqual<T>> const &map2;
With the functors defined as:
Hash:
template<typename T>
struct MyHash
{
inline size_t operator()(
std::reference_wrapper<const T> const &obj) const noexcept
{
return reinterpret_cast<size_t>(&obj.get());
}
};
Equality:
template<typename T>
struct MyEqual
{
inline bool operator()(
std::reference_wrapper<const T> const &lhs,
std::reference_wrapper<const T> const &rhs) const
{
return (reinterpret_cast<size_t>(&lhs.get()) == reinterpret_cast<size_t>(&rhs.get()));
}
};
Basically using the memory address of the referenced object as a hash and checking if two references are equal if they share the same memory address for their underlying object.
This works fine, EXCEPT when I try to compare if two sets are identical:
if(map1 == map2)
It doesn't compile, and instead, returns:
GCC:
/opt/rh/devtoolset-8/root/usr/include/c++/8/bits/hashtable_policy.h: In instantiation of ‘bool std::__detail::_Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits, true>::_M_equal(const __hashtable&) const [with _Key = std::reference_wrapper<const std::basic_string<char> >; _Value = std::reference_wrapper<const std::basic_string<char> >; _Alloc = std::allocator<std::reference_wrapper<const std::basic_string<char> > >; _ExtractKey = std::__detail::_Identity; _Equal = MyEqual<std::basic_string<char> >; _H1 = MyHash<std::basic_string<char> >; _H2 = std::__detail::_Mod_range_hashing; _Hash = std::__detail::_Default_ranged_hash; _RehashPolicy = std::__detail::_Prime_rehash_policy; _Traits = std::__detail::_Hashtable_traits<false, true, true>; std::__detail::_Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal, _H1, _H2, _Hash, _RehashPolicy, _Traits, true>::__hashtable = std::_Hashtable<std::reference_wrapper<const std::basic_string<char> >, std::reference_wrapper<const std::basic_string<char> >, std::allocator<std::reference_wrapper<const std::basic_string<char> > >, std::__detail::_Identity, MyEqual<std::basic_string<char> >, MyHash<std::basic_string<char> >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, true, true> >]’:
/opt/rh/devtoolset-8/root/usr/include/c++/8/bits/unordered_set.h:1671:40: required from ‘bool std::operator==(const std::unordered_set<_Value1, _Hash1, _Pred1, _Alloc1>&, const std::unordered_set<_Value1, _Hash1, _Pred1, _Alloc1>&) [with _Value1 = std::reference_wrapper<const std::basic_string<char> >; _Hash1 = MyHash<std::basic_string<char> >; _Pred1 = MyEqual<std::basic_string<char> >; _Alloc1 = std::allocator<std::reference_wrapper<const std::basic_string<char> > >; _Value = int; _Hash = std::hash<int>; _Pred = std::equal_to<int>; _Alloc = std::allocator<int>]’
/home/my_test.cpp:526:28: required from here
/opt/rh/devtoolset-8/root/usr/include/c++/8/bits/hashtable_policy.h:1957:47: error: no match for ‘operator==’ (operand types are ‘const std::reference_wrapper<const std::basic_string<char> >’ and ‘const std::reference_wrapper<const std::basic_string<char> >’)
if (__ity == __other.end() || !bool(*__ity == *__itx))
~~~~~~~^~~~~~~~~
CLang:
/opt/rh/devtoolset-8/root/usr/lib/gcc/x86_64-redhat-linux/8/../../../../include/c++/8/bits/hashtable_policy.h:1957:47: fatal error: invalid operands to binary expression ('const std::reference_wrapper<const std::basic_string<char, std::char_traits<char>, std::allocator<char> > >' and 'const std::reference_wrapper<const std::basic_string<char, std::char_traits<char>, std::allocator<char> > >')
if (__ity == __other.end() || !bool(*__ity == *__itx))
~~~~~~ ^ ~~~~~~
/opt/rh/devtoolset-8/root/usr/lib/gcc/x86_64-redhat-linux/8/../../../../include/c++/8/bits/unordered_set.h:1671:23: note: in instantiation of member function 'std::__detail::_Equality<std::reference_wrapper<const std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::reference_wrapper<const std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::reference_wrapper<const std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__detail::_Identity, MyEqual<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, MyHash<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, true, true>, true>::_M_equal' requested here
{ return __x._M_h._M_equal(__y._M_h); }
^
/home/my_test.cpp:526:25: note: in instantiation of function template specialization 'std::operator==<std::reference_wrapper<const std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, MyHash<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, MyEqual<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::reference_wrapper<const std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >' requested here
if(map1 == map2)
I can't figure out why, since I'm already providing a comparator for the equality when defining the set. I can certaily do the comparison explicitly, but since the STL already does that for me, I'd rather avoid writing redundant code.
Any ideas what I'm doing wrong? They'd be greatly appreciated.

I am getting issues, when compiling my code in codeblocks C++

I am trying to do my assignment for data structures class. The question is 1) Compile with UNIT_TEST defined and then run with -d yes to see the time it takes in seconds. Report that time in submission box along with the time you found when testing Selection Sort. Which is faster?
i am having trouble with understanding, what i am doing wrong. I am getting this error :
g++ -o bin/Debug/algAnalysis obj/Debug/main.o
Undefined symbols for architecture x86_64:
"Catch::NameAndTags::NameAndTags(Catch::StringRef const&, Catch::StringRef const&)", referenced from:
___cxx_global_var_init in main.o
"Catch::StringMaker<int, void>::convert(int)", referenced from:
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > Catch::Detail::stringify<int>(int const&) in main.o
"Catch::makeTestInvoker(void (*)())", referenced from:
___cxx_global_var_init in main.o
"Catch::AssertionHandler::handleExpr(Catch::ITransientExpression const&)", referenced from:
____C_A_T_C_H____T_E_S_T____0() in main.o
"Catch::AssertionHandler::handleUnexpectedInflightException()", referenced from:
____C_A_T_C_H____T_E_S_T____0() in main.o
"Catch::AssertionHandler::complete()", referenced from:
____C_A_T_C_H____T_E_S_T____0() in main.o
"Catch::AssertionHandler::AssertionHandler(Catch::StringRef, Catch::SourceLineInfo const&, Catch::StringRef, Catch::ResultDisposition::Flags)", referenced from:
____C_A_T_C_H____T_E_S_T____0() in main.o
"Catch::ITransientExpression::~ITransientExpression()", referenced from:
Catch::MatchExpr<std::__1::vector<int, std::__1::allocator<int> >, Catch::Matchers::Impl::MatchNotOf<std::__1::vector<int, std::__1::allocator<int> > > >::MatchExpr(std::__1::vector<int, std::__1::allocator<int> > const&, Catch::Matchers::Impl::MatchNotOf<std::__1::vector<int, std::__1::allocator<int> > > const&, Catch::StringRef) in main.o
Catch::MatchExpr<std::__1::vector<int, std::__1::allocator<int> >, Catch::Matchers::Impl::MatchNotOf<std::__1::vector<int, std::__1::allocator<int> > > >::~MatchExpr() in main.o
Catch::MatchExpr<std::__1::vector<int, std::__1::allocator<int> >, Catch::Matchers::Vector::EqualsMatcher<int> >::MatchExpr(std::__1::vector<int, std::__1::allocator<int> > const&, Catch::Matchers::Vector::EqualsMatcher<int> const&, Catch::StringRef) in main.o
Catch::MatchExpr<std::__1::vector<int, std::__1::allocator<int> >, Catch::Matchers::Vector::EqualsMatcher<int> >::~MatchExpr() in main.o
"Catch::ReusableStringStream::ReusableStringStream()", referenced from:
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > Catch::Detail::rangeToString<std::__1::__wrap_iter<int const*> >(std::__1::__wrap_iter<int const*>, std::__1::__wrap_iter<int const*>) in main.o
"Catch::ReusableStringStream::~ReusableStringStream()", referenced from:
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > Catch::Detail::rangeToString<std::__1::__wrap_iter<int const*> >(std::__1::__wrap_iter<int const*>, std::__1::__wrap_iter<int const*>) in main.o
"Catch::Detail::unprintableString", referenced from:
Catch::MatchExpr<std::__1::vector<int, std::__1::allocator<int> >, Catch::Matchers::Impl::MatchNotOf<std::__1::vector<int, std::__1::allocator<int> > > >::streamReconstructedExpression(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const in main.o
Catch::MatchExpr<std::__1::vector<int, std::__1::allocator<int> >, Catch::Matchers::Vector::EqualsMatcher<int> >::streamReconstructedExpression(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const in main.o
"Catch::AutoReg::AutoReg(Catch::ITestInvoker*, Catch::SourceLineInfo const&, Catch::StringRef const&, Catch::NameAndTags const&)", referenced from:
___cxx_global_var_init in main.o
"Catch::AutoReg::~AutoReg()", referenced from:
___cxx_global_var_init in main.o
"Catch::Matchers::Impl::MatcherUntypedBase::~MatcherUntypedBase()", referenced from:
Catch::Matchers::Impl::MatcherBase<std::__1::vector<int, std::__1::allocator<int> > >::~MatcherBase() in main.o
"Catch::StringRef::StringRef(char const*)", referenced from:
____C_A_T_C_H____T_E_S_T____0() in main.o
___cxx_global_var_init in main.o
(maybe you meant: __ZN5Catch9StringRefC1EPKcm)
"Catch::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, Catch::StringRef const&)", referenced from:
Catch::MatchExpr<std::__1::vector<int, std::__1::allocator<int> >, Catch::Matchers::Impl::MatchNotOf<std::__1::vector<int, std::__1::allocator<int> > > >::streamReconstructedExpression(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const in main.o
Catch::MatchExpr<std::__1::vector<int, std::__1::allocator<int> >, Catch::Matchers::Vector::EqualsMatcher<int> >::streamReconstructedExpression(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const in main.o
"Stack::pop(int&)", referenced from:
SortClass<int>::sort(int*, int, int) in main.o
"Stack::push(int)", referenced from:
SortClass<int>::sort(int*, int, int) in main.o
"Stack::Stack(int)", referenced from:
SortClass<int>::sort(int*, int, int) in main.o
"Stack::~Stack()", referenced from:
SortClass<int>::sort(int*, int, int) in main.o
"Catch::ReusableStringStream::str() const", referenced from:
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > Catch::Detail::rangeToString<std::__1::__wrap_iter<int const*> >(std::__1::__wrap_iter<int const*>, std::__1::__wrap_iter<int const*>) in main.o
"Catch::Matchers::Impl::MatcherUntypedBase::toString() const", referenced from:
Catch::MatchExpr<std::__1::vector<int, std::__1::allocator<int> >, Catch::Matchers::Impl::MatchNotOf<std::__1::vector<int, std::__1::allocator<int> > > >::streamReconstructedExpression(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const in main.o
Catch::Matchers::Impl::MatchNotOf<std::__1::vector<int, std::__1::allocator<int> > >::describe() const in main.o
Catch::MatchExpr<std::__1::vector<int, std::__1::allocator<int> >, Catch::Matchers::Vector::EqualsMatcher<int> >::streamReconstructedExpression(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const in main.o
"typeinfo for Catch::ITransientExpression", referenced from:
typeinfo for Catch::MatchExpr<std::__1::vector<int, std::__1::allocator<int> >, Catch::Matchers::Impl::MatchNotOf<std::__1::vector<int, std::__1::allocator<int> > > > in main.o
typeinfo for Catch::MatchExpr<std::__1::vector<int, std::__1::allocator<int> >, Catch::Matchers::Vector::EqualsMatcher<int> > in main.o
"typeinfo for Catch::Matchers::Impl::MatcherUntypedBase", referenced from:
typeinfo for Catch::Matchers::Impl::MatcherBase<std::__1::vector<int, std::__1::allocator<int> > > in main.o
"vtable for Catch::ITransientExpression", referenced from:
Catch::ITransientExpression::ITransientExpression(bool, bool) in main.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"vtable for Catch::Matchers::Impl::MatcherUntypedBase", referenced from:
Catch::Matchers::Impl::MatcherUntypedBase::MatcherUntypedBase(Catch::Matchers::Impl::MatcherUntypedBase const&) in main.o
Catch::Matchers::Impl::MatcherUntypedBase::MatcherUntypedBase() in main.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Process terminated with status 1 (0 minute(s), 0 second(s))
Here is my code so far:
#define CATCH_CONFIG_MAI
#define UNIT_TEST
#include <iostream>
#include <fstream>
#include <vector>
#ifdef UNIT_TEST
#include "catch.hpp"
#endif // UNIT_TEST
#include "stack.h"
using namespace std;
template <class T>
class SortClass
{
private:
void swap(T &a, T&b);
int split(T a[], int first, int last);
public:
void sort(T a[], int first, int last);
};
template <typename T>
int SortClass <T>::split (T arr[], int first, int last)
{
T x= arr[last];
int i= (first-1);
for (int j=first; j <= last-1; j++)
{
if (arr[j]<= x)
{
i++;
swap (arr[i], arr[j]);
}
}
swap (arr[i+1], arr[last]);
return (i+1);
}
template <class T>
void SortClass <T>::sort(T a[], int first, int last)
{
Stack stack;
stack.push (first);
stack.push (last);
while (not stack.isEmpty())
{
stack.pop(last);
stack.pop(first);
int s= split (a, first, last);
if (s-1>first )
{
stack.push(first);
stack.push(s-1);
}
if (s+1<last)
{
stack.push(s+1);
stack.push(last);
}
}
}
template <class T>
void SortClass <T>:: swap(T &a, T &b)
{
T temp=a;
a=b;
b=temp;
}
#ifndef UNIT_TEST
int main ()
{
const int N=10;
int x1[N]={1,3,5,6,4,2,8,9,7};
for (auto e: x1) std:: cout << e << " ";
std:: cout << std:: endl;
SortClass <int> s; s.sort(x1,0,N-1);
for (auto e: x1) std:: cout << e << " ";
std:: cout << std:: endl;
}
#endif
#ifdef UNIT_TEST
using Catch::Matchers::Equals;
TEST_CASE("A fast sort")
{
const int N = 6;
int x1[N] = { 1, 3, 5, 6, 4, 2 };
int x2[N] = { 1, 2, 3, 4, 5, 6 };
vector<int> v1(x1, x1 + N);
vector<int> v2(x2, x2 + N);
REQUIRE_THAT(v1, not Equals(v2));
SortClass<int> s;
s.sort(x1, 0, N - 1);
vector<int> v0(x1, x1 + N);
REQUIRE_THAT(v0, Equals(v2));
const int M = 100000;
int x3[M]; int x4[M];
ifstream ifs1("numbers");
for (auto &e : x3)
ifs1 >> e;
ifstream ifs2("sorted");
for (auto &e : x4)
ifs2 >> e;
s.sort(x3, 0, M - 1);
vector<int> v3(x3, x3 + M);
vector<int> v4(x4, x4 + M);
REQUIRE_THAT(v3, Equals(v4));
}
#endif
#define CATCH_CONFIG_MAIN Must be defined before #include "catch.hpp".
You have #define CATCH_CONFIG_MAI.

OpenCV Framework: symbol(s) not found for architecture armv7

I've got the precompiled opencv2.framework from OpenCV, and I've added it to my project. However trying to compile the project gives errors like:
Undefined symbols for architecture armv7:
"std::__1::__vector_base_common<true>::__throw_length_error() const", referenced from:
std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >::__append(unsigned long) in opencv2(matrix.o)
std::__1::vector<cv::Vec<int, 128>, std::__1::allocator<cv::Vec<int, 128> > >::__append(unsigned long) in opencv2(matrix.o)
std::__1::vector<cv::Vec<int, 64>, std::__1::allocator<cv::Vec<int, 64> > >::__append(unsigned long) in opencv2(matrix.o)
std::__1::vector<cv::Vec<int, 32>, std::__1::allocator<cv::Vec<int, 32> > >::__append(unsigned long) in opencv2(matrix.o)
std::__1::vector<cv::Vec<int, 16>, std::__1::allocator<cv::Vec<int, 16> > >::__append(unsigned long) in opencv2(matrix.o)
std::__1::vector<cv::Vec<int, 12>, std::__1::allocator<cv::Vec<int, 12> > >::__append(unsigned long) in opencv2(matrix.o)
std::__1::vector<cv::Vec<int, 9>, std::__1::allocator<cv::Vec<int, 9> > >::__append(unsigned long) in opencv2(matrix.o)
...
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
cv::Exception::Exception(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) in opencv2(system.o)
cv::error(cv::Exception const&) in opencv2(system.o)
_cvRegisterModule in opencv2(system.o)
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::operator=(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
cv::Exception::formatMessage() in opencv2(system.o)
"_OBJC_CLASS_$_ALAssetsLibrary", referenced from:
objc-class-ref in opencv2(cap_ios_video_camera.o)
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(char const*, unsigned long)", referenced from:
cv::sum(cv::_InputArray const&) in opencv2(stat.o)
cv::countNonZero(cv::_InputArray const&) in opencv2(stat.o)
cv::mean(cv::_InputArray const&, cv::_InputArray const&) in opencv2(stat.o)
cv::meanStdDev(cv::_InputArray const&, cv::_OutputArray const&, cv::_OutputArray const&, cv::_InputArray const&) in opencv2(stat.o)
cv::minMaxIdx(cv::_InputArray const&, double*, double*, int*, int*, cv::_InputArray const&) in opencv2(stat.o)
cv::minMaxLoc(cv::_InputArray const&, double*, double*, cv::Point_<int>*, cv::Point_<int>*, cv::_InputArray const&) in opencv2(stat.o)
cv::norm(cv::_InputArray const&, int, cv::_InputArray const&) in opencv2(stat.o)
...
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string()", referenced from:
cv::sum(cv::_InputArray const&) in opencv2(stat.o)
cv::countNonZero(cv::_InputArray const&) in opencv2(stat.o)
cv::mean(cv::_InputArray const&, cv::_InputArray const&) in opencv2(stat.o)
cv::meanStdDev(cv::_InputArray const&, cv::_OutputArray const&, cv::_OutputArray const&, cv::_InputArray const&) in opencv2(stat.o)
cv::minMaxIdx(cv::_InputArray const&, double*, double*, int*, int*, cv::_InputArray const&) in opencv2(stat.o)
cv::minMaxLoc(cv::_InputArray const&, double*, double*, cv::Point_<int>*, cv::Point_<int>*, cv::_InputArray const&) in opencv2(stat.o)
cv::norm(cv::_InputArray const&, int, cv::_InputArray const&) in opencv2(stat.o)
...
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
I've set Build Active Architectures Only to No in my build settings, but it still happens. What do I need to do to get OpenCV working? I'm using XCode 5, targeting iOS7.
I've already added -lstdc++ to linker flags and switch the C++ compiler to libstdc++, as-per this answer.
I have tried compiling OpenCV from source too but that yields the same error.
It's the same regardless of whether I have iOS6 or 7 as the deployment target.
Two things you should check:
You're attempting to use the C++ portions of OpenCV but Xcode/clang are very literal. If the file you're linking with is a .m it'll treat it as an Objective-C. Instead we want to treat it as an Objective-C++ file by either renaming the extension to .mm or by bringing up the file's properties in the right side bar and selecting Objective-C++ Source for the Type.
ALAssetsLibrary is defined in AssetsLibrary.framework, please add it to your Link Binary With Libraries step for your project.

Compiling player/stage on Mac os x

Not sure if any had this problem or similar but if you have some help would be appreciated.
I have setup postgresql in the following location and set the link path to /usr/local/pgsql-9.0. Also setup the libpqxx in the /usr/local/lib
But I am guessing the error says that it cant find the postgresql anywhere. Is that correct ?
Linking CXX shared library libplayerdrivers.dylib Undefined symbols: "_PQntuples", referenced from:
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
PostgresConn::GetLayerData(char const*)in dbconn.o "_PQresultErrorMessage", referenced from:
Postlog::rollback() constin postlog.o
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o "_PQgetvalue", referenced from:
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
PostgresConn::GetLayerData(char const*)in dbconn.o
PostgresConn::GetLayerData(char const*)in dbconn.o
PostgresConn::GetLayerData(char const*)in dbconn.o
PostgresConn::GetLayerInfo(char const*)in dbconn.o
PostgresConn::GetVectorMapInfo(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)in dbconn.o
PostgresConn::GetVectorMapInfo(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)in dbconn.o "_PQexecParams", referenced from:
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o "_PQresultStatus", referenced from:
Postlog::rollback() constin postlog.o
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::GetLayerData(char const*)in dbconn.o
PostgresConn::GetLayerInfo(char const*)in dbconn.o
PostgresConn::GetVectorMapInfo(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)in dbconn.o
PostgresConn::GetVectorMapInfo(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)in dbconn.o "_PQexec", referenced from:
Postlog::rollback() constin postlog.o
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::GetLayerData(char const*)in dbconn.o
PostgresConn::GetLayerInfo(char const*)in dbconn.o
PostgresConn::GetVectorMapInfo(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)in dbconn.o
PostgresConn::GetVectorMapInfo(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)in dbconn.o "_PQgetlength", referenced from:
PostgresConn::GetLayerData(char const*)in dbconn.o
PostgresConn::GetLayerInfo(char const*)in dbconn.o
PostgresConn::GetVectorMapInfo(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)in dbconn.o "_PQbinaryTuples", referenced from:
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o "_PQclear", referenced from:
Postlog::rollback() constin postlog.o
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
Postlog::storeData(int, char const*, void const*, double, unsigned short, unsigned short, unsigned char, unsigned char)in postlog.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::WriteLayerData(LayerDataHolder&) in dbconn.o
PostgresConn::GetLayerData(char const*)in dbconn.o
PostgresConn::GetLayerInfo(char const*)in dbconn.o
PostgresConn::GetVectorMapInfo(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)in dbconn.o
PostgresConn::GetVectorMapInfo(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)in dbconn.o "_PQsetdbLogin", referenced from:
Postlog::Setup() in postlog.o
PostgresConn::Connect(char const*, char const*, char const*, char const*, char const*)in dbconn.o "_PQstatus", referenced from:
Postlog::Setup() in postlog.o
Postlog::isConnected() const in postlog.o
PostgresConn::Connected() in postgis.o
PostgresConn::Connect(char const*, char const*, char const*, char const*, char const*)in dbconn.o "_PQfinish", referenced from:
Postlog::Shutdown() in postlog.o
Postlog::~Postlog()in postlog.o
Postlog::~Postlog()in postlog.o
Postlog::~Postlog()in postlog.o
PostgresConn::Disconnect() in dbconn.o
ld: symbol(s) not found
Thanks to "mu is too short" its indeed the missing -lpq
Looks like there is a bug with the player/stage build for Mac Os X

Can't compile code using Boost graphviz.hpp

I'm trying to use read_graphviz extension to pull a graphviz .dot file into a Boost Grpah. Here is my sample. I can't get it to compile. I posted the g++ error message after the code but I had to but it short, it's too long to post here without significant re-formatting.
The documentation the graphviz.hpp library is too terse to guide me in the right direction. Anyone have any thoughts?
#include <iostream>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/property_map.hpp>
#include <boost/graph/graphviz.hpp>
int main( int argc, char* argv[] )
{
assert( argc == 2 );
std::ifstream dotFile( argv[1], std::ifstream::in );
typedef boost::adjacency_list<> Graph;
Graph graph( 17 );
boost::dynamic_properties properties;
boost::property_map< Graph, boost::vertex_name_t >::type name = get( boost::vertex_name, graph );
properties.property( "node_id", name );
bool readResult;
readResult = read_graphviz( dotFile, graph, properties );
return 0;
g++ -Wall -c -o graphvizTest.o graphvizTest.cpp
/usr/include/boost/dynamic_property_map.hpp: In member function
std::string boost::detail::dynamic_property_map_adaptor<PropertyMap>::get_string(const boost::any&)
[with PropertyMap =
boost::vec_adj_list_vertex_property_map<
boost::adjacency_list<
boost::vecS, boost::vecS, boost::directedS,
boost::no_property, boost::no_property,
boost::no_property, boost::listS
>,
boost::adjacency_list<
boost::vecS, boost::vecS, boost::directedS, boost::no_property,
boost::no_property, boost::no_property, boost::listS
>*,
boost::detail::error_property_not_found,
boost::detail::error_property_not_found&,
boost::vertex_name_t
>
]':
graphvizTest.cpp:29: instantiated from here
/usr/include/boost/dynamic_property_map.hpp:196: error: no match for 'operator<<' in 'out << boost::get
[with
PropertyMap =
boost::vec_adj_list_vertex_property_map<
boost::adjacency_list<
boost::vecS, boost::vecS, boost::directedS, boost::no_property, boost::no_property,
boost::no_property, boost::listS
>,
boost::adjacency_list<
boost::vecS, boost::vecS, boost::directedS, boost::no_property, boost::no_property,
boost::no_property, boost::listS
>*,
boost::detail::error_property_not_found,
boost::detail::error_property_not_found&,
boost::vertex_name_t
>,
Reference = boost::detail::error_property_not_found&, K = long unsigned int
]
...
There is no node property named name in your graph, and so the property map you get from get(boost::vertex_name, graph) is an error. Look at the documentation for how to add a vertex property for boost::vertex_name (using old-style properties) or add a bundled property to represent the name and use that instead of the get expression in your dynamic_properties object.

Resources