>source

C++ 프로그램을 컴파일할 수 없습니다. 분명히 Boost.Move 라이브러리가 종속성으로 추가되지 않았기 때문입니다. unique_ptr과 관련된 컴파일 오류. 프로그램에는 boost.move를 제외하고 성공적으로 추가한 종속성으로 여러 부스트 라이브러리가 있습니다. 많은 예제와 code를 살펴보았지만 CMakelists.txt에 추가하는 방법에 대한 구체적인 예제는 제출하지 않았습니다.

내 .cpp 프로그램의 삽입(모든 종속성이 없는 문제를 일으키는 것으로 나타남):

#include <boost/move/unique_ptr.hpp>...
boost::movelib::unique_ptr<plctag> _plctag;
...

CMakeLists.txt의 내 부스트 종속성:

find_package(Boost REQUIRED COMPONENTS log thread)

컴파일 오류, 정말 제 생각인가요?:

path///.cpp:100:46: error: wrong number of template arguments (1, should be 2)
  100 |             boost::movelib::unique_ptr<plctag> _plctag;
      |                                              ^
In file included from /usr/include/boost/smart_ptr/shared_ptr.hpp:28,
                 from /usr/include/boost/shared_ptr.hpp:17,
                 from /usr/include/boost/date_time/time_clock.hpp:17,
                 from /usr/include/boost/thread/thread_time.hpp:9,
                 from /usr/include/boost/thread/lock_types.hpp:18,
                 from /usr/include/boost/thread/pthread/mutex.hpp:16,
                 from /usr/include/boost/thread/mutex.hpp:16,
                 path///.hpp:4,
                 path///.cpp:8:
/usr/include/boost/smart_ptr/detail/shared_count.hpp:58:36: note: provided for ‘template<class T, class D> class boost::movelib::unique_ptr’
   58 | template< class T, class D > class unique_ptr;
      |                                    ^~~~~~~~~~
path///.cpp:102:21: error: request for member ‘reset’ in ‘_tag’, which is of non-class type ‘int’
  102 |             _tag.reset();
      |                     ^~~~~
path///.cpp:108:20: error: base operand of ‘->’ is not a pointer
  108 |             _tag->write_tag_str();
      |                    ^~
path///.cpp:111:27: error: base operand of ‘->’ is not a pointer
  111 |             string_vec= _tag->read_tag_str();
      |                           ^~
path///.cpp:125:20: error: base operand of ‘->’ is not a pointer
  125 |             _tag->write_tag();
      |                    ^~
path///.cpp:128:27: error: base operand of ‘->’ is not a pointer
  128 |             float_vec= _tag->read_tag();

제가 이해하지 못하는 부분이 있을 수 있습니다. 이 시점에서 거의 초보자입니다. 도와 주셔서 감사합니다

최소한의 재현 가능한 예를 제공하십시오. 문제가 code에 있고 cmake와 아무 관련이 없다고 생각합니다.

Alan Birtles2021-12-31 07:03:14

boost/move/unique_ptr.hpp 헤더가 하는 방식으로 기본 템플릿 매개변수를 지정하지 않는 boost::movelib::unique_ptr의 전방 선언이 있는 것 같습니다. 아마도 #include 를 이동하여 첫 번째 포함으로 path.hpp에 나타나도록 하면 문제를 해결할 수 있습니다...

fabian2021-12-31 07:03:14

@AlanBirtles: 기꺼이 하겠지만 전체 프로그램에는 종속성이 너무 많기 때문에 게시물을 복잡하게 만들고 싶지 않습니다. 내 가설에 대한 의견을 듣고 싶었고, 맞다면 해결책을 찾고 싶었습니다. cmake에서 부스트 이동에 대한 종속성을 추가하지 않았습니다. 필요하지 않다고 생각하십니까? 정말 감사합니다

nigeno2021-12-31 07:03:14

@fabian: 귀하의 의견에 감사드립니다. code가 작동해야 합니다. 검증된 github 라이브러리에서 거의 복사했습니다. 제가 잘못 건설했나봐요. 컴파일을 위해 부스트 이동 종속성을 추가할 필요가 없다고 생각하십니까? 스레드와 로그만 추가했습니다.

nigeno2021-12-31 07:03:14

부스트 구성 요소는 target_link_libraries를 사용하여 적절한 구성 요소를 연결할 때 필요한 종속성을 자동으로 추가해야 합니다. 여기에는 lib의 공개 헤더에 사용되는 헤더를 사용하는 데 필요한 포함 디렉토리 추가가 포함되어야 하므로 target_link_libraries(yourTarget PRIVATE Boost::thread)는 필요한 헤더를 제공해야 컴파일을 통해 얻을 수 있고 필요한 헤더처럼 보입니다. 있습니다("include xy.hpp not found" 또는 이와 유사한 오류 없음). 지금 내 유일한 추측은 포함에 예상치 못한 일이 일어나고 있다는 것입니다...

fabian2021-12-31 07:03:14
  • 이전 cors : Auth0으로 인증된 Faunadb에 요청을 게시하려고 할 때 "요청한 리소스에 'Access-Control-Allow-Origin' 헤더가 없습니다"
  • 다음 r : 키 글리프 테두리를 유지하면서 세로 범례에서 키 글리프 사이의 간격 수정