视觉SLAM十四讲 ch4 trajectoryError.cpp报错问题和解决

首先来看一下我的CMakelist文件:

cmake_minimum_required(VERSION 3.0)
project(trajectoryError)
# 在cmake脚本中,设置编译选项可以通过add_compile_options命令,也可以通过set命令修改CMAKE_CXX_FLAGS或CMAKE_C_FLAGS。
# add_compile_options(-std=c++11) # 这句话的意思是在make时让编译器(g++)自动添加C++11的性质 -> 设置编译选项

option(USE_UBUNTU_20 "Set to ON if you are using Ubuntu 20.04" ON)
find_package(Pangolin REQUIRED)
if(USE_UBUNTU_20)
    message("You are using Ubuntu 20.04, fmt::fmt will be linked")
    find_package(fmt REQUIRED)
    set(FMT_LIBRARIES fmt::fmt)
endif()
include_directories(${Pangolin_INCLUDE_DIRS})
add_executable(trajectoryError trajectoryError.cpp)
target_link_libraries(trajectoryError ${FMT_LIBRARIES})
target_link_libraries(trajectoryError ${Pangolin_LIBRARIES})

set(CMAKE_BUILD_TYPE "Release")
set(Sophus_LIBRARIES  "/usr/local/lib/libSophus.so")
find_package(Sophus REQUIRED)
include_directories( ${Sophus_INCLUDE_DIRS} )
target_link_libraries(trajectoryError ${Sophus_LIBRARIES})

修改了cmakelist文件可以解决大部分的由于库链接出现问题所导致的报错。
然后再看一下代码的需要修改的地方:
请添加图片描述
请添加图片描述
我们需要把头文件对应起来,原来的头文件需要与安装在本地(sophus支持带模板的,可以选择不安装)的文件名字对应,具体是后缀为.h还是.hpp需要根据自己的电脑对应起来。
修改完之后大部分的错误可以解决了。
请添加图片描述
请添加图片描述
如果cmake时遇到了这样的错误的话:

[ 50%] Building CXX object CMakeFiles/trajectoryError.dir/trajectoryError.cpp.o
In file included from /usr/local/include/pangolin/utils/signal_slot.h:3,
                 from /usr/local/include/pangolin/windowing/window.h:35,
                 from /usr/local/include/pangolin/display/display.h:34,
                 from /usr/local/include/pangolin/pangolin.h:38,
                 from /home/hbt/文档/slambook2/ch4/example/trajectoryError.cpp:4:
/usr/local/include/sigslot/signal.hpp:109:79: error: ‘decay_t’ is not a member of ‘std’; did you mean ‘decay’?
  109 | constexpr bool is_weak_ptr_compatible_v = detail::is_weak_ptr_compatible<std::decay_t<P>>::value;
      |                                                                               ^~~~~~~
      |                                                                               decay
/usr/local/include/sigslot/signal.hpp:109:79: error: ‘decay_t’ is not a member of ‘std’; did you mean ‘decay’?
  109 | constexpr bool is_weak_ptr_compatible_v = detail::is_weak_ptr_compatible<std::decay_t<P>>::value;
      |                                                                               ^~~~~~~
      |                                                                               decay
/usr/local/include/sigslot/signal.hpp:109:87: error: template argument 1 is invalid
  109 | constexpr bool is_weak_ptr_compatible_v = detail::is_weak_ptr_compatible<std::decay_t<P>>::value;
      |                                                                                       ^
/usr/local/include/sigslot/signal.hpp:109:92: error: ‘::value’ has not been declared
  109 | constexpr bool is_weak_ptr_compatible_v = detail::is_weak_ptr_compatible<std::decay_t<P>>::value;
      |                                                                                            ^~~~~
/usr/local/include/sigslot/signal.hpp:132:53: error: ‘remove_pointer_t’ is not a member of ‘std’; did you mean ‘remove_pointer’?
  132 |                                                std::remove_pointer_t<T>>::value;
      |                                                     ^~~~~~~~~~~~~~~~
      |                                                     remove_pointer
/usr/local/include/sigslot/signal.hpp:132:53: error: ‘remove_pointer_t’ is not a member of ‘std’; did you mean ‘remove_pointer’?
  132 |                                                std::remove_pointer_t<T>>::value;
      |                                                     ^~~~~~~~~~~~~~~~
      |                                                     remove_pointer
/usr/local/include/sigslot/signal.hpp:132:70: error: template argument 2 is invalid
  132 |                                                std::remove_pointer_t<T>>::value;
      |                                                                      ^
/usr/local/include/sigslot/signal.hpp:132:75: error: ‘::value’ has not been declared
  132 |                                                std::remove_pointer_t<T>>::value;
      |                                                                           ^~~~~
/usr/local/include/sigslot/signal.hpp:223:32: error: ‘enable_if_t’ is not a member of ‘std’; did you mean ‘enable_if’?
  223 | struct function_traits<T, std::enable_if_t<trait::is_func_v<T>>> {
      |                                ^~~~~~~~~~~
      |                                enable_if
/usr/local/include/sigslot/signal.hpp:223:32: error: ‘enable_if_t’ is not a member of ‘std’; did you mean ‘enable_if’?
  223 | struct function_traits<T, std::enable_if_t<trait::is_func_v<T>>> {
      |                                ^~~~~~~~~~~
      |                                enable_if
/usr/local/include/sigslot/signal.hpp:223:62: error: type/value mismatch at argument 2 in template parameter list for ‘template<class T, class> struct sigslot::detail::function_traits’
  223 | struct function_traits<T, std::enable_if_t<trait::is_func_v<T>>> {
      |                                                              ^~
/usr/local/include/sigslot/signal.hpp:223:62: note:   expected a type, got ‘(<expression error> < is_func_v<T>)’
/usr/local/include/sigslot/signal.hpp:223:64: error: expected unqualified-id before ‘>’ token
  223 | struct function_traits<T, std::enable_if_t<trait::is_func_v<T>>> {
      |                                                                ^
/usr/local/include/sigslot/signal.hpp:233:33: error: ‘enable_if_t’ is not a member of ‘std’; did you mean ‘enable_if’?
  233 | struct function_traits<T*, std::enable_if_t<trait::is_func_v<T>>> {
      |                                 ^~~~~~~~~~~
      |                                 enable_if
/usr/local/include/sigslot/signal.hpp:233:33: error: ‘enable_if_t’ is not a member of ‘std’; did you mean ‘enable_if’?
  233 | struct function_traits<T*, std::enable_if_t<trait::is_func_v<T>>> {
      |                                 ^~~~~~~~~~~
      |                                 enable_if
/usr/local/include/sigslot/signal.hpp:233:63: error: type/value mismatch at argument 2 in template parameter list for ‘template<class T, class> struct sigslot::detail::function_traits’
  233 | struct function_traits<T*, std::enable_if_t<trait::is_func_v<T>>> {
      |                                                               ^~
/usr/local/include/sigslot/signal.hpp:233:63: note:   expected a type, got ‘(<expression error> < is_func_v<T>)’
/usr/local/include/sigslot/signal.hpp:233:65: error: expected unqualified-id before ‘>’ token
  233 | struct function_traits<T*, std::enable_if_t<trait::is_func_v<T>>> {
      |                                                                 ^
/usr/local/include/sigslot/signal.hpp:243:32: error: ‘enable_if_t’ is not a member of ‘std’; did you mean ‘enable_if’?
  243 | struct function_traits<T, std::enable_if_t<trait::is_pmf_v<T>>> {
      |                                ^~~~~~~~~~~
      |                                enable_if
/usr/local/include/sigslot/signal.hpp:243:32: error: ‘enable_if_t’ is not a member of ‘std’; did you mean ‘enable_if’?
  243 | struct function_traits<T, std::enable_if_t<trait::is_pmf_v<T>>> {
      |                                ^~~~~~~~~~~
      |                                enable_if
/usr/local/include/sigslot/signal.hpp:243:61: error: type/value mismatch at argument 2 in template parameter list for ‘template<class T, class> struct sigslot::detail::function_traits’
  243 | struct function_traits<T, std::enable_if_t<trait::is_pmf_v<T>>> {
      |                                                             ^~
/usr/local/include/sigslot/signal.hpp:243:61: note:   expected a type, got ‘(<expression error> < is_pmf_v<T>)’
/usr/local/include/sigslot/signal.hpp:243:63: error: expected unqualified-id before ‘>’ token
  243 | struct function_traits<T, std::enable_if_t<trait::is_pmf_v<T>>> {
      |                                                               ^
/usr/local/include/sigslot/signal.hpp:254:32: error: ‘enable_if_t’ is not a member of ‘std’; did you mean ‘enable_if’?
  254 | struct function_traits<T, std::enable_if_t<trait::has_call_operator_v<T>>> {
      |                                ^~~~~~~~~~~
      |                                enable_if
/usr/local/include/sigslot/signal.hpp:254:32: error: ‘enable_if_t’ is not a member of ‘std’; did you mean ‘enable_if’?
  254 | struct function_traits<T, std::enable_if_t<trait::has_call_operator_v<T>>> {
      |                                ^~~~~~~~~~~
      |                                enable_if
/usr/local/include/sigslot/signal.hpp:254:72: error: type/value mismatch at argument 2 in template parameter list for ‘template<class T, class> struct sigslot::detail::function_traits’
  254 | struct function_traits<T, std::enable_if_t<trait::has_call_operator_v<T>>> {
      |                                                                        ^~
/usr/local/include/sigslot/signal.hpp:254:72: note:   expected a type, got ‘(<expression error> < has_call_operator_v<T>)’
/usr/local/include/sigslot/signal.hpp:254:74: error: expected unqualified-id before ‘>’ token
  254 | struct function_traits<T, std::enable_if_t<trait::has_call_operator_v<T>>> {
      |                                                                          ^
/usr/local/include/sigslot/signal.hpp: In function ‘sigslot::detail::func_ptr sigslot::detail::get_function_ptr(const T&)’:
/usr/local/include/sigslot/signal.hpp:269:26: error: ‘decay_t’ is not a member of ‘std’; did you mean ‘decay’?
  269 |     function_traits<std::decay_t<T>>::ptr(t, d);
      |                          ^~~~~~~
      |                          decay
/usr/local/include/sigslot/signal.hpp:269:26: error: ‘decay_t’ is not a member of ‘std’; did you mean ‘decay’?
  269 |     function_traits<std::decay_t<T>>::ptr(t, d);
      |                          ^~~~~~~
      |                          decay
/usr/local/include/sigslot/signal.hpp:269:34: error: template argument 1 is invalid
  269 |     function_traits<std::decay_t<T>>::ptr(t, d);
      |                                  ^
/usr/local/include/sigslot/signal.hpp:269:35: error: expected unqualified-id before ‘>’ token
  269 |     function_traits<std::decay_t<T>>::ptr(t, d);
      |                                   ^~
/usr/local/include/sigslot/signal.hpp: At global scope:
/usr/local/include/sigslot/signal.hpp:291:32: error: ‘enable_if_t’ is not a member of ‘std’; did you mean ‘enable_if’?
  291 | struct object_pointer<T*, std::enable_if_t<trait::is_pointer_v<T*>>> {
      |                                ^~~~~~~~~~~
      |                                enable_if
/usr/local/include/sigslot/signal.hpp:291:32: error: ‘enable_if_t’ is not a member of ‘std’; did you mean ‘enable_if’?
  291 | struct object_pointer<T*, std::enable_if_t<trait::is_pointer_v<T*>>> {
      |                                ^~~~~~~~~~~
      |                                enable_if
/usr/local/include/sigslot/signal.hpp:291:66: error: type/value mismatch at argument 2 in template parameter list for ‘template<class T, class> struct sigslot::detail::object_pointer’
  291 | struct object_pointer<T*, std::enable_if_t<trait::is_pointer_v<T*>>> {
      |                                                                  ^~
/usr/local/include/sigslot/signal.hpp:291:66: note:   expected a type, got ‘(<expression error> < is_pointer_v<T*>)’
/usr/local/include/sigslot/signal.hpp:291:68: error: expected unqualified-id before ‘>’ token
  291 | struct object_pointer<T*, std::enable_if_t<trait::is_pointer_v<T*>>> {
      |                                                                    ^
/usr/local/include/sigslot/signal.hpp:298:31: error: ‘enable_if_t’ is not a member of ‘std’; did you mean ‘enable_if’?
  298 | struct object_pointer<T, std::enable_if_t<trait::is_weak_ptr_v<T>>> {
      |                               ^~~~~~~~~~~
      |                               enable_if
/usr/local/include/sigslot/signal.hpp:298:31: error: ‘enable_if_t’ is not a member of ‘std’; did you mean ‘enable_if’?
  298 | struct object_pointer<T, std::enable_if_t<trait::is_weak_ptr_v<T>>> {
      |                               ^~~~~~~~~~~
      |                               enable_if
/usr/local/include/sigslot/signal.hpp:298:65: error: type/value mismatch at argument 2 in template parameter list for ‘template<class T, class> struct sigslot::detail::object_pointer’
  298 | struct object_pointer<T, std::enable_if_t<trait::is_weak_ptr_v<T>>> {
      |                                                                 ^~
/usr/local/include/sigslot/signal.hpp:298:65: note:   expected a type, got ‘(<expression error> < is_weak_ptr_v<T>)’
/usr/local/include/sigslot/signal.hpp:298:67: error: expected unqualified-id before ‘>’ token
  298 | struct object_pointer<T, std::enable_if_t<trait::is_weak_ptr_v<T>>> {
      |                                                                   ^
/usr/local/include/sigslot/signal.hpp:306:31: error: ‘enable_if_t’ is not a member of ‘std’; did you mean ‘enable_if’?
  306 | struct object_pointer<T, std::enable_if_t<!trait::is_pointer_v<T> &&
      |                               ^~~~~~~~~~~
      |                               enable_if
/usr/local/include/sigslot/signal.hpp:306:31: error: ‘enable_if_t’ is not a member of ‘std’; did you mean ‘enable_if’?
  306 | struct object_pointer<T, std::enable_if_t<!trait::is_pointer_v<T> &&
      |                               ^~~~~~~~~~~
      |                               enable_if
/usr/local/include/sigslot/signal.hpp:308:76: error: type/value mismatch at argument 2 in template parameter list for ‘template<class T, class> struct sigslot::detail::object_pointer’
  308 |                                           trait::is_weak_ptr_compatible_v<T>>>
      |                                                                            ^~
/usr/local/include/sigslot/signal.hpp:308:76: note:   expected a type, got ‘(((<expression error> < (! is_pointer_v<T>)) && (! is_weak_ptr_v<T>)) && is_weak_ptr_compatible_v<T>)’
/usr/local/include/sigslot/signal.hpp:308:78: error: expected unqualified-id before ‘>’ token
  308 |                                           trait::is_weak_ptr_compatible_v<T>>>
      |                                                                              ^
/usr/local/include/sigslot/signal.hpp:398:41: error: ‘std::enable_if_t’ has not been declared
  398 |     explicit copy_on_write(U && x, std::enable_if_t<!std::is_same<std::decay_t<U>,
      |                                         ^~~~~~~~~~~
/usr/local/include/sigslot/signal.hpp:398:52: error: expected ‘,’ or ‘...’ before ‘<’ token
  398 |     explicit copy_on_write(U && x, std::enable_if_t<!std::is_same<std::decay_t<U>,
      |                                                    ^
/usr/local/include/sigslot/signal.hpp:532:5: error: ‘index’ function uses ‘auto’ type specifier without trailing return type
  532 |     auto index() const {
      |     ^~~~
/usr/local/include/sigslot/signal.hpp:532:5: note: deduced return type only available with ‘-std=c++14’ or ‘-std=gnu++14’
/usr/local/include/sigslot/signal.hpp:536:5: error: ‘index’ function uses ‘auto’ type specifier without trailing return type
  536 |     auto& index() {
      |     ^~~~
/usr/local/include/sigslot/signal.hpp:536:5: note: deduced return type only available with ‘-std=c++14’ or ‘-std=gnu++14’
/usr/local/include/sigslot/signal.hpp:793:10: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
  793 |     std::enable_if_t<function_traits<C>::must_check_object, bool>
      |          ^~~~~~~~~~~
      |          enable_if
/usr/local/include/sigslot/signal.hpp:799:10: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
  799 |     std::enable_if_t<!function_traits<C>::must_check_object, bool>
      |          ^~~~~~~~~~~
      |          enable_if
/usr/local/include/sigslot/signal.hpp:876:10: error: ‘decay_t’ in namespace ‘std’ does not name a template type; did you mean ‘decay’?
  876 |     std::decay_t<Func> func;
      |          ^~~~~~~
      |          decay
/usr/local/include/sigslot/signal.hpp: In constructor ‘constexpr sigslot::detail::slot<Func, Args>::slot(sigslot::detail::cleanable&, F&&, Gid)’:
/usr/local/include/sigslot/signal.hpp:858:11: error: class ‘sigslot::detail::slot<Func, Args>’ does not have any field named ‘func’
  858 |         , func{std::forward<F>(f)} {}
      |           ^~~~
/usr/local/include/sigslot/signal.hpp: In member function ‘sigslot::detail::func_ptr sigslot::detail::slot<Func, Args>::get_callable() const’:
/usr/local/include/sigslot/signal.hpp:866:33: error: ‘func’ was not declared in this scope; did you mean ‘Func’?
  866 |         return get_function_ptr(func);
      |                                 ^~~~
      |                                 Func
/usr/local/include/sigslot/signal.hpp: In member function ‘const std::type_info& sigslot::detail::slot<Func, Args>::get_callable_type() const’:
/usr/local/include/sigslot/signal.hpp:871:23: error: ‘func’ was not declared in this scope; did you mean ‘Func’?
  871 |         return typeid(func);
      |                       ^~~~
      |                       Func
/usr/local/include/sigslot/signal.hpp: At global scope:
/usr/local/include/sigslot/signal.hpp:908:10: error: ‘decay_t’ in namespace ‘std’ does not name a template type; did you mean ‘decay’?
  908 |     std::decay_t<Func> func;
      |          ^~~~~~~
      |          decay
/usr/local/include/sigslot/signal.hpp: In constructor ‘constexpr sigslot::detail::slot_extended<Func, Args>::slot_extended(sigslot::detail::cleanable&, F&&, sigslot::group_id)’:
/usr/local/include/sigslot/signal.hpp:888:11: error: class ‘sigslot::detail::slot_extended<Func, Args>’ does not have any field named ‘func’
  888 |         , func{std::forward<F>(f)} {}
      |           ^~~~
/usr/local/include/sigslot/signal.hpp: In member function ‘sigslot::detail::func_ptr sigslot::detail::slot_extended<Func, Args>::get_callable() const’:
/usr/local/include/sigslot/signal.hpp:898:33: error: ‘func’ was not declared in this scope; did you mean ‘Func’?
  898 |         return get_function_ptr(func);
      |                                 ^~~~
      |                                 Func
/usr/local/include/sigslot/signal.hpp: In member function ‘const std::type_info& sigslot::detail::slot_extended<Func, Args>::get_callable_type() const’:
/usr/local/include/sigslot/signal.hpp:903:23: error: ‘func’ was not declared in this scope; did you mean ‘Func’?
  903 |         return typeid(func);
      |                       ^~~~
      |                       Func
/usr/local/include/sigslot/signal.hpp: At global scope:
/usr/local/include/sigslot/signal.hpp:945:10: error: ‘decay_t’ in namespace ‘std’ does not name a template type; did you mean ‘decay’?
  945 |     std::decay_t<Pmf> pmf;
      |          ^~~~~~~
      |          decay
/usr/local/include/sigslot/signal.hpp:946:10: error: ‘decay_t’ in namespace ‘std’ does not name a template type; did you mean ‘decay’?
  946 |     std::decay_t<Ptr> ptr;
      |          ^~~~~~~
      |          decay
/usr/local/include/sigslot/signal.hpp: In constructor ‘constexpr sigslot::detail::slot_pmf<Pmf, Ptr, Args>::slot_pmf(sigslot::detail::cleanable&, F&&, P&&, sigslot::group_id)’:
/usr/local/include/sigslot/signal.hpp:922:11: error: class ‘sigslot::detail::slot_pmf<Pmf, Ptr, Args>’ does not have any field named ‘pmf’
  922 |         , pmf{std::forward<F>(f)}
      |           ^~~
/usr/local/include/sigslot/signal.hpp:923:11: error: class ‘sigslot::detail::slot_pmf<Pmf, Ptr, Args>’ does not have any field named ‘ptr’
  923 |         , ptr{std::forward<P>(p)} {}
      |           ^~~
/usr/local/include/sigslot/signal.hpp: In member function ‘void sigslot::detail::slot_pmf<Pmf, Ptr, Args>::call_slot(Args ...)’:
/usr/local/include/sigslot/signal.hpp:927:12: error: ‘ptr’ was not declared in this scope; did you mean ‘Ptr’?
  927 |         ((*ptr).*pmf)(args...);
      |            ^~~
      |            Ptr
/usr/local/include/sigslot/signal.hpp:927:18: error: ‘pmf’ was not declared in this scope; did you mean ‘Pmf’?
  927 |         ((*ptr).*pmf)(args...);
      |                  ^~~
      |                  Pmf
/usr/local/include/sigslot/signal.hpp: In member function ‘sigslot::detail::func_ptr sigslot::detail::slot_pmf<Pmf, Ptr, Args>::get_callable() const’:
/usr/local/include/sigslot/signal.hpp:931:33: error: ‘pmf’ was not declared in this scope; did you mean ‘Pmf’?
  931 |         return get_function_ptr(pmf);
      |                                 ^~~
      |                                 Pmf
/usr/local/include/sigslot/signal.hpp: In member function ‘const void* sigslot::detail::slot_pmf<Pmf, Ptr, Args>::get_object() const’:
/usr/local/include/sigslot/signal.hpp:935:31: error: ‘ptr’ was not declared in this scope; did you mean ‘Ptr’?
  935 |         return get_object_ptr(ptr);
      |                               ^~~
      |                               Ptr
/usr/local/include/sigslot/signal.hpp: In member function ‘const std::type_info& sigslot::detail::slot_pmf<Pmf, Ptr, Args>::get_callable_type() const’:
/usr/local/include/sigslot/signal.hpp:940:23: error: ‘pmf’ was not declared in this scope; did you mean ‘Pmf’?
  940 |         return typeid(pmf);
      |                       ^~~
      |                       Pmf
/usr/local/include/sigslot/signal.hpp: At global scope:
/usr/local/include/sigslot/signal.hpp:982:10: error: ‘decay_t’ in namespace ‘std’ does not name a template type; did you mean ‘decay’?
  982 |     std::decay_t<Pmf> pmf;
      |          ^~~~~~~
      |          decay
/usr/local/include/sigslot/signal.hpp:983:10: error: ‘decay_t’ in namespace ‘std’ does not name a template type; did you mean ‘decay’?
  983 |     std::decay_t<Ptr> ptr;
      |          ^~~~~~~
      |          decay
/usr/local/include/sigslot/signal.hpp: In constructor ‘constexpr sigslot::detail::slot_pmf_extended<Pmf, Ptr, Args>::slot_pmf_extended(sigslot::detail::cleanable&, F&&, P&&, sigslot::group_id)’:
/usr/local/include/sigslot/signal.hpp:958:11: error: class ‘sigslot::detail::slot_pmf_extended<Pmf, Ptr, Args>’ does not have any field named ‘pmf’
  958 |         , pmf{std::forward<F>(f)}
      |           ^~~
/usr/local/include/sigslot/signal.hpp:959:11: error: class ‘sigslot::detail::slot_pmf_extended<Pmf, Ptr, Args>’ does not have any field named ‘ptr’
  959 |         , ptr{std::forward<P>(p)} {}
      |           ^~~
/usr/local/include/sigslot/signal.hpp: In member function ‘void sigslot::detail::slot_pmf_extended<Pmf, Ptr, Args>::call_slot(Args ...)’:
/usr/local/include/sigslot/signal.hpp:965:12: error: ‘ptr’ was not declared in this scope; did you mean ‘Ptr’?
  965 |         ((*ptr).*pmf)(conn, args...);
      |            ^~~
      |            Ptr
/usr/local/include/sigslot/signal.hpp:965:18: error: ‘pmf’ was not declared in this scope; did you mean ‘Pmf’?
  965 |         ((*ptr).*pmf)(conn, args...);
      |                  ^~~
      |                  Pmf
/usr/local/include/sigslot/signal.hpp: In member function ‘sigslot::detail::func_ptr sigslot::detail::slot_pmf_extended<Pmf, Ptr, Args>::get_callable() const’:
/usr/local/include/sigslot/signal.hpp:969:33: error: ‘pmf’ was not declared in this scope; did you mean ‘Pmf’?
  969 |         return get_function_ptr(pmf);
      |                                 ^~~
      |                                 Pmf
/usr/local/include/sigslot/signal.hpp: In member function ‘const void* sigslot::detail::slot_pmf_extended<Pmf, Ptr, Args>::get_object() const’:
/usr/local/include/sigslot/signal.hpp:972:31: error: ‘ptr’ was not declared in this scope; did you mean ‘Ptr’?
  972 |         return get_object_ptr(ptr);
      |                               ^~~
      |                               Ptr
/usr/local/include/sigslot/signal.hpp: In member function ‘const std::type_info& sigslot::detail::slot_pmf_extended<Pmf, Ptr, Args>::get_callable_type() const’:
/usr/local/include/sigslot/signal.hpp:977:23: error: ‘pmf’ was not declared in this scope; did you mean ‘Pmf’?
  977 |         return typeid(pmf);
      |                       ^~~
      |                       Pmf
/usr/local/include/sigslot/signal.hpp: At global scope:
/usr/local/include/sigslot/signal.hpp:1032:10: error: ‘decay_t’ in namespace ‘std’ does not name a template type; did you mean ‘decay’?
 1032 |     std::decay_t<Func> func;
      |          ^~~~~~~
      |          decay
/usr/local/include/sigslot/signal.hpp:1033:10: error: ‘decay_t’ in namespace ‘std’ does not name a template type; did you mean ‘decay’?
 1033 |     std::decay_t<WeakPtr> ptr;
      |          ^~~~~~~
      |          decay
/usr/local/include/sigslot/signal.hpp: In constructor ‘constexpr sigslot::detail::slot_tracked<Func, WeakPtr, Args>::slot_tracked(sigslot::detail::cleanable&, F&&, P&&, sigslot::group_id)’:
/usr/local/include/sigslot/signal.hpp:997:11: error: class ‘sigslot::detail::slot_tracked<Func, WeakPtr, Args>’ does not have any field named ‘func’
  997 |         , func{std::forward<F>(f)}
      |           ^~~~
/usr/local/include/sigslot/signal.hpp:998:11: error: class ‘sigslot::detail::slot_tracked<Func, WeakPtr, Args>’ does not have any field named ‘ptr’
  998 |         , ptr{std::forward<P>(p)}
      |           ^~~
/usr/local/include/sigslot/signal.hpp: In member function ‘bool sigslot::detail::slot_tracked<Func, WeakPtr, Args>::connected() const’:
/usr/local/include/sigslot/signal.hpp:1002:17: error: ‘ptr’ was not declared in this scope
 1002 |         return !ptr.expired() && slot_state::connected();
      |                 ^~~
/usr/local/include/sigslot/signal.hpp: In member function ‘void sigslot::detail::slot_tracked<Func, WeakPtr, Args>::call_slot(Args ...)’:
/usr/local/include/sigslot/signal.hpp:1007:19: error: ‘ptr’ was not declared in this scope
 1007 |         auto sp = ptr.lock();
      |                   ^~~
/usr/local/include/sigslot/signal.hpp: In member function ‘sigslot::detail::func_ptr sigslot::detail::slot_tracked<Func, WeakPtr, Args>::get_callable() const’:
/usr/local/include/sigslot/signal.hpp:1018:33: error: ‘func’ was not declared in this scope; did you mean ‘Func’?
 1018 |         return get_function_ptr(func);
      |                                 ^~~~
      |                                 Func
/usr/local/include/sigslot/signal.hpp: In member function ‘const void* sigslot::detail::slot_tracked<Func, WeakPtr, Args>::get_object() const’:
/usr/local/include/sigslot/signal.hpp:1022:31: error: ‘ptr’ was not declared in this scope
 1022 |         return get_object_ptr(ptr);
      |                               ^~~
/usr/local/include/sigslot/signal.hpp: In member function ‘const std::type_info& sigslot::detail::slot_tracked<Func, WeakPtr, Args>::get_callable_type() const’:
/usr/local/include/sigslot/signal.hpp:1027:23: error: ‘func’ was not declared in this scope; did you mean ‘Func’?
 1027 |         return typeid(func);
      |                       ^~~~
      |                       Func
/usr/local/include/sigslot/signal.hpp: At global scope:
/usr/local/include/sigslot/signal.hpp:1082:10: error: ‘decay_t’ in namespace ‘std’ does not name a template type; did you mean ‘decay’?
 1082 |     std::decay_t<Pmf> pmf;
      |          ^~~~~~~
      |          decay
/usr/local/include/sigslot/signal.hpp:1083:10: error: ‘decay_t’ in namespace ‘std’ does not name a template type; did you mean ‘decay’?
 1083 |     std::decay_t<WeakPtr> ptr;
      |          ^~~~~~~
      |          decay
/usr/local/include/sigslot/signal.hpp: In constructor ‘constexpr sigslot::detail::slot_pmf_tracked<Pmf, WeakPtr, Args>::slot_pmf_tracked(sigslot::detail::cleanable&, F&&, P&&, sigslot::group_id)’:
/usr/local/include/sigslot/signal.hpp:1047:11: error: class ‘sigslot::detail::slot_pmf_tracked<Pmf, WeakPtr, Args>’ does not have any field named ‘pmf’
 1047 |         , pmf{std::forward<F>(f)}
      |           ^~~
/usr/local/include/sigslot/signal.hpp:1048:11: error: class ‘sigslot::detail::slot_pmf_tracked<Pmf, WeakPtr, Args>’ does not have any field named ‘ptr’
 1048 |         , ptr{std::forward<P>(p)}
      |           ^~~
/usr/local/include/sigslot/signal.hpp: In member function ‘bool sigslot::detail::slot_pmf_tracked<Pmf, WeakPtr, Args>::connected() const’:
/usr/local/include/sigslot/signal.hpp:1052:17: error: ‘ptr’ was not declared in this scope
 1052 |         return !ptr.expired() && slot_state::connected();
      |                 ^~~
/usr/local/include/sigslot/signal.hpp: In member function ‘void sigslot::detail::slot_pmf_tracked<Pmf, WeakPtr, Args>::call_slot(Args ...)’:
/usr/local/include/sigslot/signal.hpp:1057:19: error: ‘ptr’ was not declared in this scope
 1057 |         auto sp = ptr.lock();
      |                   ^~~
/usr/local/include/sigslot/signal.hpp:1063:21: error: ‘pmf’ was not declared in this scope; did you mean ‘Pmf’?
 1063 |             ((*sp).*pmf)(args...);
      |                     ^~~
      |                     Pmf
/usr/local/include/sigslot/signal.hpp: In member function ‘sigslot::detail::func_ptr sigslot::detail::slot_pmf_tracked<Pmf, WeakPtr, Args>::get_callable() const’:
/usr/local/include/sigslot/signal.hpp:1068:33: error: ‘pmf’ was not declared in this scope; did you mean ‘Pmf’?
 1068 |         return get_function_ptr(pmf);
      |                                 ^~~
      |                                 Pmf
/usr/local/include/sigslot/signal.hpp: In member function ‘const void* sigslot::detail::slot_pmf_tracked<Pmf, WeakPtr, Args>::get_object() const’:
/usr/local/include/sigslot/signal.hpp:1072:31: error: ‘ptr’ was not declared in this scope
 1072 |         return get_object_ptr(ptr);
      |                               ^~~
/usr/local/include/sigslot/signal.hpp: In member function ‘const std::type_info& sigslot::detail::slot_pmf_tracked<Pmf, WeakPtr, Args>::get_callable_type() const’:
/usr/local/include/sigslot/signal.hpp:1077:23: error: ‘pmf’ was not declared in this scope; did you mean ‘Pmf’?
 1077 |         return typeid(pmf);
      |                       ^~~
      |                       Pmf
/usr/local/include/sigslot/signal.hpp: At global scope:
/usr/local/include/sigslot/signal.hpp:1115:27: error: ‘conditional_t’ in namespace ‘std’ does not name a template type; did you mean ‘conditional’?
 1115 |     using cow_type = std::conditional_t<is_thread_safe<L>::value,
      |                           ^~~~~~~~~~~~~
      |                           conditional
/usr/local/include/sigslot/signal.hpp:1119:32: error: ‘conditional_t’ in namespace ‘std’ does not name a template type; did you mean ‘conditional’?
 1119 |     using cow_copy_type = std::conditional_t<is_thread_safe<L>::value,
      |                                ^~~~~~~~~~~~~
      |                                conditional
/usr/local/include/sigslot/signal.hpp:1201:10: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
 1201 |     std::enable_if_t<trait::is_callable_v<arg_list, Callable>, connection>
      |          ^~~~~~~~~~~
      |          enable_if
/usr/local/include/sigslot/signal.hpp:1221:10: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
 1221 |     std::enable_if_t<trait::is_callable_v<ext_arg_list, Callable>, connection>
      |          ^~~~~~~~~~~
      |          enable_if
/usr/local/include/sigslot/signal.hpp:1241:10: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
 1241 |     std::enable_if_t<trait::is_callable_v<arg_list, Pmf, Ptr> &&
      |          ^~~~~~~~~~~
      |          enable_if
/usr/local/include/sigslot/signal.hpp:1261:10: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
 1261 |     std::enable_if_t<trait::is_callable_v<arg_list, Pmf, Ptr> &&
      |          ^~~~~~~~~~~
      |          enable_if
/usr/local/include/sigslot/signal.hpp:1281:10: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
 1281 |     std::enable_if_t<trait::is_callable_v<ext_arg_list, Pmf, Ptr> &&
      |          ^~~~~~~~~~~
      |          enable_if
/usr/local/include/sigslot/signal.hpp:1310:10: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
 1310 |     std::enable_if_t<!trait::is_callable_v<arg_list, Pmf> &&
      |          ^~~~~~~~~~~
      |          enable_if
/usr/local/include/sigslot/signal.hpp:1340:10: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
 1340 |     std::enable_if_t<trait::is_callable_v<arg_list, Callable> &&
      |          ^~~~~~~~~~~
      |          enable_if
/usr/local/include/sigslot/signal.hpp:1376:10: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
 1376 |     std::enable_if_t<(trait::is_callable_v<arg_list, Callable> ||
      |          ^~~~~~~~~~~
      |          enable_if
/usr/local/include/sigslot/signal.hpp:1399:10: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?
 1399 |     std::enable_if_t<!trait::is_callable_v<arg_list, Obj> &&
      |          ^~~~~~~~~~~
      |          enable_if
/usr/local/include/sigslot/signal.hpp:1522:12: error: ‘cow_copy_type’ does not name a type
 1522 |     inline cow_copy_type<list_type, Lockable> slots_reference() {
      |            ^~~~~~~~~~~~~
/usr/local/include/sigslot/signal.hpp:1529:12: error: ‘make_slot’ function uses ‘auto’ type specifier without trailing return type
 1529 |     inline auto make_slot(A && ...a) {
      |            ^~~~
/usr/local/include/sigslot/signal.hpp:1529:12: note: deduced return type only available with ‘-std=c++14’ or ‘-std=gnu++14’
/usr/local/include/sigslot/signal.hpp:1589:5: error: ‘cow_type’ does not name a type; did you mean ‘lock_type’?
 1589 |     cow_type<list_type, Lockable> m_slots;
      |     ^~~~~~~~
      |     lock_type
/usr/local/include/sigslot/signal.hpp: In constructor ‘sigslot::signal_base< <template-parameter-1-1>, <template-parameter-1-2> >::signal_base(sigslot::signal_base< <template-parameter-1-1>, <template-parameter-1-2> >&&)’:
/usr/local/include/sigslot/signal.hpp:1146:14: error: ‘m_slots’ was not declared in this scope
 1146 |         swap(m_slots, o.m_slots);
      |              ^~~~~~~
/usr/local/include/sigslot/signal.hpp: In member function ‘sigslot::signal_base< <template-parameter-1-1>, <template-parameter-1-2> >& sigslot::signal_base< <template-parameter-1-1>, <template-parameter-1-2> >::operator=(sigslot::signal_base< <template-parameter-1-1>, <template-parameter-1-2> >&&)’:
/usr/local/include/sigslot/signal.hpp:1155:14: error: ‘m_slots’ was not declared in this scope
 1155 |         swap(m_slots, o.m_slots);
      |              ^~~~~~~
/usr/local/include/sigslot/signal.hpp: In member function ‘void sigslot::signal_base< <template-parameter-1-1>, <template-parameter-1-2> >::operator()(U&& ...)’:
/usr/local/include/sigslot/signal.hpp:1180:9: error: ‘cow_copy_type’ was not declared in this scope
 1180 |         cow_copy_type<list_type, Lockable> ref = slots_reference();
      |         ^~~~~~~~~~~~~
/usr/local/include/sigslot/signal.hpp:1180:32: error: expected primary-expression before ‘,’ token
 1180 |         cow_copy_type<list_type, Lockable> ref = slots_reference();
      |                                ^
/usr/local/include/sigslot/signal.hpp:1180:42: error: expected primary-expression before ‘>’ token
 1180 |         cow_copy_type<list_type, Lockable> ref = slots_reference();
      |                                          ^
/usr/local/include/sigslot/signal.hpp:1180:44: error: ‘ref’ was not declared in this scope; did you mean ‘std::ref’?
 1180 |         cow_copy_type<list_type, Lockable> ref = slots_reference();
      |                                            ^~~
      |                                            std::ref
In file included from /usr/include/c++/9/functional:58,
                 from /usr/local/include/pangolin/utils/type_convert.h:33,
                 from /usr/local/include/pangolin/utils/params.h:31,
                 from /usr/local/include/pangolin/display/display.h:33,
                 from /usr/local/include/pangolin/pangolin.h:38,
                 from /home/hbt/文档/slambook2/ch4/example/trajectoryError.cpp:4:
/usr/include/c++/9/bits/refwrap.h:370:5: note: ‘std::ref’ declared here
  370 |     ref(reference_wrapper<_Tp> __t) noexcept
      |     ^~~
In file included from /usr/local/include/pangolin/utils/signal_slot.h:3,
                 from /usr/local/include/pangolin/windowing/window.h:35,
                 from /usr/local/include/pangolin/display/display.h:34,
                 from /usr/local/include/pangolin/pangolin.h:38,
                 from /home/hbt/文档/slambook2/ch4/example/trajectoryError.cpp:4:
/usr/local/include/sigslot/signal.hpp:1180:50: error: there are no arguments to ‘slots_reference’ that depend on a template parameter, so a declaration of ‘slots_reference’ must be available [-fpermissive]
 1180 |         cow_copy_type<list_type, Lockable> ref = slots_reference();
      |                                                  ^~~~~~~~~~~~~~~
/usr/local/include/sigslot/signal.hpp:1180:50: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
/usr/local/include/sigslot/signal.hpp: In member function ‘size_t sigslot::signal_base< <template-parameter-1-1>, <template-parameter-1-2> >::disconnect(const Callable&, const Obj&)’:
/usr/local/include/sigslot/signal.hpp:1423:41: error: use of ‘auto’ in lambda parameter declaration only available with ‘-std=c++14’ or ‘-std=gnu++14’
 1423 |         return disconnect_if([&] (const auto &s) {
      |                                         ^~~~
/usr/local/include/sigslot/signal.hpp: In lambda function:
/usr/local/include/sigslot/signal.hpp:1424:21: error: base operand of ‘->’ is not a pointer
 1424 |             return s->has_object(obj) && s->has_callable(c);
      |                     ^~
/usr/local/include/sigslot/signal.hpp:1424:43: error: base operand of ‘->’ is not a pointer
 1424 |             return s->has_object(obj) && s->has_callable(c);
      |                                           ^~
/usr/local/include/sigslot/signal.hpp: In member function ‘size_t sigslot::signal_base< <template-parameter-1-1>, <template-parameter-1-2> >::disconnect(sigslot::group_id)’:
/usr/local/include/sigslot/signal.hpp:1439:46: error: ‘m_slots’ was not declared in this scope
 1439 |         for (auto &group : detail::cow_write(m_slots)) {
      |                                              ^~~~~~~
/usr/local/include/sigslot/signal.hpp: In member function ‘size_t sigslot::signal_base< <template-parameter-1-1>, <template-parameter-1-2> >::slot_count()’:
/usr/local/include/sigslot/signal.hpp:1486:9: error: ‘cow_copy_type’ was not declared in this scope
 1486 |         cow_copy_type<list_type, Lockable> ref = slots_reference();
      |         ^~~~~~~~~~~~~
/usr/local/include/sigslot/signal.hpp:1486:32: error: expected primary-expression before ‘,’ token
 1486 |         cow_copy_type<list_type, Lockable> ref = slots_reference();
      |                                ^
/usr/local/include/sigslot/signal.hpp:1486:42: error: expected primary-expression before ‘>’ token
 1486 |         cow_copy_type<list_type, Lockable> ref = slots_reference();
      |                                          ^
/usr/local/include/sigslot/signal.hpp:1486:44: error: ‘ref’ was not declared in this scope; did you mean ‘std::ref’?
 1486 |         cow_copy_type<list_type, Lockable> ref = slots_reference();
      |                                            ^~~
      |                                            std::ref
In file included from /usr/include/c++/9/functional:58,
                 from /usr/local/include/pangolin/utils/type_convert.h:33,
                 from /usr/local/include/pangolin/utils/params.h:31,
                 from /usr/local/include/pangolin/display/display.h:33,
                 from /usr/local/include/pangolin/pangolin.h:38,
                 from /home/hbt/文档/slambook2/ch4/example/trajectoryError.cpp:4:
/usr/include/c++/9/bits/refwrap.h:370:5: note: ‘std::ref’ declared here
  370 |     ref(reference_wrapper<_Tp> __t) noexcept
      |     ^~~
In file included from /usr/local/include/pangolin/utils/signal_slot.h:3,
                 from /usr/local/include/pangolin/windowing/window.h:35,
                 from /usr/local/include/pangolin/display/display.h:34,
                 from /usr/local/include/pangolin/pangolin.h:38,
                 from /home/hbt/文档/slambook2/ch4/example/trajectoryError.cpp:4:
/usr/local/include/sigslot/signal.hpp:1486:50: error: there are no arguments to ‘slots_reference’ that depend on a template parameter, so a declaration of ‘slots_reference’ must be available [-fpermissive]
 1486 |         cow_copy_type<list_type, Lockable> ref = slots_reference();
      |                                                  ^~~~~~~~~~~~~~~
/usr/local/include/sigslot/signal.hpp: In member function ‘void sigslot::signal_base< <template-parameter-1-1>, <template-parameter-1-2> >::clean(sigslot::detail::slot_state*)’:
/usr/local/include/sigslot/signal.hpp:1504:46: error: ‘m_slots’ was not declared in this scope
 1504 |         for (auto &group : detail::cow_write(m_slots)) {
      |                                              ^~~~~~~
/usr/local/include/sigslot/signal.hpp: In member function ‘void sigslot::signal_base< <template-parameter-1-1>, <template-parameter-1-2> >::add_slot(sigslot::signal_base< <template-parameter-1-1>, <template-parameter-1-2> >::slot_ptr&&)’:
/usr/local/include/sigslot/signal.hpp:1538:42: error: ‘m_slots’ was not declared in this scope
 1538 |         auto &groups = detail::cow_write(m_slots);
      |                                          ^~~~~~~
/usr/local/include/sigslot/signal.hpp: In member function ‘size_t sigslot::signal_base< <template-parameter-1-1>, <template-parameter-1-2> >::disconnect_if(Cond&&)’:
/usr/local/include/sigslot/signal.hpp:1560:42: error: ‘m_slots’ was not declared in this scope
 1560 |         auto &groups = detail::cow_write(m_slots);
      |                                          ^~~~~~~
/usr/local/include/sigslot/signal.hpp: In member function ‘void sigslot::signal_base< <template-parameter-1-1>, <template-parameter-1-2> >::clear()’:
/usr/local/include/sigslot/signal.hpp:1584:27: error: ‘m_slots’ was not declared in this scope
 1584 |         detail::cow_write(m_slots).clear();
      |                           ^~~~~~~
/usr/local/include/sigslot/signal.hpp: In instantiation of ‘void sigslot::signal_base< <template-parameter-1-1>, <template-parameter-1-2> >::operator()(U&& ...) [with U = {pangolin::VarState::Event}; Lockable = std::mutex; T = {pangolin::VarState::Event}]’:
/usr/local/include/pangolin/var/varstate.h:264:23:   required from ‘std::map<std::__cxx11::basic_string<char>, std::shared_ptr<pangolin::VarValueGeneric> >::iterator pangolin::VarState::AddUpgradedVar(const std::shared_ptr<pangolin::VarValue<T> >&, const iterator&, bool) [with T = bool; std::map<std::__cxx11::basic_string<char>, std::shared_ptr<pangolin::VarValueGeneric> >::iterator = std::_Rb_tree_iterator<std::pair<const std::__cxx11::basic_string<char>, std::shared_ptr<pangolin::VarValueGeneric> > >]’
/usr/local/include/pangolin/var/varstate.h:205:13:   required from ‘std::shared_ptr<pangolin::VarValueGeneric> pangolin::VarState::GetOrCreateVar(const T&, const pangolin::VarMeta&) [with T = bool]’
/usr/local/include/pangolin/var/var.h:83:50:   required from ‘pangolin::Var<T>::Var(const T&, const pangolin::VarMeta&) [with T = bool]’
/usr/local/include/pangolin/var/var.h:88:35:   required from ‘pangolin::Var<T>::Var(const string&, const T&) [with T = bool; std::string = std::__cxx11::basic_string<char>]’
/usr/local/include/pangolin/display/widgets.h:153:50:   required from here
/usr/local/include/sigslot/signal.hpp:1180:65: error: ‘slots_reference’ was not declared in this scope
 1180 |         cow_copy_type<list_type, Lockable> ref = slots_reference();
      |                                                  ~~~~~~~~~~~~~~~^~
make[2]: *** [CMakeFiles/trajectoryError.dir/build.make:63:CMakeFiles/trajectoryError.dir/trajectoryError.cpp.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:76:CMakeFiles/trajectoryError.dir/all] 错误 2
make: *** [Makefile:84:all] 错误 2

大部分的原因就是CMakelist文件没有把库链接进来,所以只需要修改cmakelist文件为文章开头那样即可。
然后运行效果如图:
请添加图片描述
参考文章:
《视觉SLAM十四讲》第二版源码slambook2编译调试
[cmake:设置编译选项的讲究(add_compile_options和CMAKE_CXX_FLAGS的区别) 转自CSDN](https://blog.csdn.net/bianchengjingling22/article/details/88794329?ops_request_misc=&request_id=&biz_id=102&utm_term=add_compile_options(-std=c++11&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-88794329.first_rank_v2_pc_rank_v29&spm=1018.2226.3001.4187)
(.text.startup+0x102):对‘Sophus::SO3::operator*(Sophus::SO3 const&) const’未定义的引用

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值