>source

이 오류가 나타납니다.

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xmemory0:881: error: C2661: 'std::array<uint,3>::array': no overloaded function takes 3 arguments

이 코드 줄에서 :

   template<class _Objty,
        class... _Types>
        static void construct(_Alloc&, _Objty * const _Ptr, _Types&&... _Args)
        {   // construct _Objty(_Types...) at _Ptr
        ::new (const_cast<void *>(static_cast<const volatile void *>(_Ptr)))
            _Objty(_STD forward<_Types>(_Args)...);          // ** Error is here
        }

나는 사용하고있다 std::array<uint, 3> 이렇게 :

void MyClass::myMethod(
        // ...
        , std::vector<std::array<uint, 3>> &indices
        // ...
        , const size_t ssteps
        // ...
        )
{
    // ...
    
    indices.reserve(2*ssteps);
    auto steps = int(ssteps);
    auto offs = steps;
    auto last = steps - 1;
    // ...
    indices.emplace_back(0, last, offs);
    indices.emplace_back(last, offs + last, offs);
    // ...
}

이 오류가 내부에서 발생하는 이유를 이해할 수 없습니다. xmemory0 포함 된 파일. 어떤 힌트라도 감사합니다.

  • 답변 # 1

    @kakkoko가 이미 지적했듯이 :

    indices.emplace_back(0, last, offs) 생성자를 호출 array<uint, 3>::array(0, last, offs) 그러나 배열에는 그러한 생성자가 없습니다.

    안타깝게도 추가 중괄호 쌍으로는 충분하지 않습니다.

     indices.emplace_back({ 0u, last, offs }); // Doesn't work! :-(
    
    

    산출:

    main.cpp: In function 'int main()':
    main.cpp:11:42: error: no matching function for call to 'std::vector<std::array<unsigned int, 3> >::emplace_back(<brace-enclosed initializer list>)'
       11 |   indices.emplace_back({ 0u, last, offs });
          |                                          ^
    In file included from /usr/local/include/c++/10.2.0/vector:72,
                     from main.cpp:2:
    /usr/local/include/c++/10.2.0/bits/vector.tcc:109:7: note: candidate: 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {}; _Tp = std::array<unsigned int, 3>; _Alloc = std::allocator<std::array<unsigned int, 3> >; std::vector<_Tp, _Alloc>::reference = std::array<unsigned int, 3>&]'
      109 |       vector<_Tp, _Alloc>::
          |       ^~~~~~~~~~~~~~~~~~~
    /usr/local/include/c++/10.2.0/bits/vector.tcc:109:7: note:   candidate expects 0 arguments, 1 provided
    
    

    coliru의 라이브 데모

    따라서 요소는 명시 적으로 구성되어야합니다.

     indices.emplace_back(std::array<uint, 3>{ 0u, last, offs }); // Does work. :-)
    
    

    coliru의 라이브 데모

    또는 std::vector::push_back() 대신 사용해야합니다.

     indices.push_back(std::array<uint, 3>{ 0u, last, offs });
    
    

    coliru의 라이브 데모

    <시간 />

    완전한 데모 :

    #include <array>
    #include <iostream>
    #include <vector>
    using uint = unsigned;
    int main()
    {
      std::vector<std::array<uint, 3>> indices;
      const uint last = 3, offs = 4;
      
      indices.emplace_back(std::array<uint, 3>{ 0u, last, offs });
      indices.push_back({ last, offs + last, offs });
      
      std::cout << "indices: {";
      const char *sep = "\n";
      for (const std::array<uint, 3> &indicesI : indices) {
        std::cout << sep << "  {";
        const char *sepI = " ";
        for (const uint i : indicesI) {
          std::cout << sepI << i;
          sepI = ", ";
        }
        std::cout << " }";
        sep = ",\n";
      }
      std::cout << "\n}\n";
    }
    
    

    산출:

    indices: {
      { 0, 3, 4 },
      { 3, 7, 4 }
    }
    
    

    coliru의 라이브 데모

관련 자료

  • 이전 php - 문자열을 구문 분석하고 특수 텍스트 링크 [a href ="url"] 텍스트 [/ a]를 HTML 링크로 변환
  • 다음 파이썬 스크립트에서 작동하지 않는 입력 함수