求助丨请问以下C++代码的错误是什么
104
2025.02.27
2025.02.27
发布于 四川

简介

使用语句1不会报错,而使用语句2会报错,请问是什么原因呢?


代码

代码片段

void addText(string text) {
        // p = m.insert(p, text.begin(), text.end());         语句1
        p = m.emplace(p, text.begin(), text.end());      //    语句2
        p += text.length();
    }

错误

In file included from prog_joined.cpp:1:
In file included from ./precompiled/headers.h:25:
In file included from /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/ccomplex:39:
In file included from /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/complex:45:
In file included from /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/sstream:40:
In file included from /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/istream:40:
In file included from /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/ios:44:
In file included from /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/ios_base.h:41:
In file included from /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/locale_classes.h:40:
In file included from /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/string:54:
In file included from /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/basic_string.h:39:
In file included from /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/ext/alloc_traits.h:34:
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/alloc_traits.h:536:4: error: no matching function for call to 'construct_at'
  531 |           std::construct_at(__p, std::forward<_Args>(__args)...);
      |           ^~~~~~~~~~~~~~~~~
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/vector.tcc:397:23: note: in instantiation of function template specialization 'std::allocator_traits<std::allocator<char>>::construct<char, __gnu_cxx::__normal_iterator<char *, std::basic_string<char>>, __gnu_cxx::__normal_iterator<char *, std::basic_string<char>>>' requested here
  392 |               _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
      |                              ^
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_vector.h:1349:11: note: in instantiation of function template specialization 'std::vector<char>::_M_emplace_aux<__gnu_cxx::__normal_iterator<char *, std::basic_string<char>>, __gnu_cxx::__normal_iterator<char *, std::basic_string<char>>>' requested here
 1344 |         { return _M_emplace_aux(__position, std::forward<_Args>(__args)...); }
      |                  ^
Line 11: Char 13: note: in instantiation of function template specialization 'std::vector<char>::emplace<__gnu_cxx::__normal_iterator<char *, std::basic_string<char>>, __gnu_cxx::__normal_iterator<char *, std::basic_string<char>>>' requested here
   11 |         p=m.emplace(p,text.begin(), text.end());
      |             ^
/usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_construct.h:94:5: note: candidate template ignored: substitution failure [with _Tp = char, _Args = <__gnu_cxx::__normal_iterator<char *, std::basic_string<char>>, __gnu_cxx::__normal_iterator<char *, std::basic_string<char>>>]: excess elements in scalar initializer
   89 |     construct_at(_Tp* __location, _Args&&... __args)
      |     ^
   90 |     noexcept(noexcept(::new((void*)0) _Tp(std::declval<_Args>()...)))
   91 |     -> decltype(::new((void*)0) _Tp(std::declval<_Args>()...))
      |                                 ~~~
1 error generated.
评论 (0)