C++ string의 insert(end(), "string")를 할 수 없는 건

소개



VisualStudio2019 C++에서 망설임을 참고할 때.
코멘트를 받았다 @ 유메 토도 님, @amate 님, 감사합니다.

문제



C++에서 다음 코드
#include <string>
using namespace std;

int main(void)
{
    string s = "text.txt";
    s.insert(s.end() - 4, "_output");
}

실행하면 오류 C2664가 나옵니다. 뭔가 안되는 것 같습니다.


해결 방법



여러가지 시험했는데, string 클래스의 insert 함수의 제1 인수는 이터레이터가 아니고 「문자열의 처음부터 n 문자째에 삽입」하는 n의 수를 넣는 것 같습니다. 그래서 length()를 사용하여,
우선, 다음과 같이 하면 컴파일러가 지나갑니다.
#include <string>
using namespace std;

int main(void)
{
    string s = "text.txt";
    s.insert(s.length() - 4, "_output");
}

그렇다면 지나갔습니다.


원인



분명히 string 클래스 참조 ( htps : // cpp fjp. 기주 b. 이오 / 레후 렌세 / st 링 g / 바시 c_st 린 g / 린세 rt. HTML )를 확인한 곳, insert 멤버 함수 중 이번과 같이 첫 번째 인수에 이터레이터를 대입했을 경우, 아래의 4가지 중 하나를 작성해야 할 것 입니다.
iterator insert(const_iterator p, charT c);                       // (6) C++11
iterator insert(const_iterator p, size_type n, charT c);          // (7) C++11
template<class InputIterator>
iterator insert(const_iterator p,
                InputIterator first, InputIterator last);         // (8) C++11

iterator insert(const_iterator p, initializer_list<charT>);       // (9) C++11

이번 문제는
insert(イテレータ, 文字列);

의 형식으로 써 버려, 그러한 형식의 함수는 string 클래스의 insert 멤버 함수에 존재하지 않습니다.
또, 해결 방법으로 컴파일러가 통과하는 것은, 레퍼런스에
basic_string& insert(size_type pos, const charT* s); // (4)

라는 함수가 준비되어 있습니다.
s.insert(s.length() - 4, "_output");

쓰는 법이 적용되었기 때문에 컴파일이 지났습니다.

좋은 웹페이지 즐겨찾기