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");
쓰는 법이 적용되었기 때문에 컴파일이 지났습니다.
Reference
이 문제에 관하여(C++ string의 insert(end(), "string")를 할 수 없는 건), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mimuro_syunya/items/3bb60dc777472a9bba76
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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");
쓰는 법이 적용되었기 때문에 컴파일이 지났습니다.
Reference
이 문제에 관하여(C++ string의 insert(end(), "string")를 할 수 없는 건), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mimuro_syunya/items/3bb60dc777472a9bba76
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <string>
using namespace std;
int main(void)
{
string s = "text.txt";
s.insert(s.length() - 4, "_output");
}
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(イテレータ, 文字列);
basic_string& insert(size_type pos, const charT* s); // (4)
s.insert(s.length() - 4, "_output");
Reference
이 문제에 관하여(C++ string의 insert(end(), "string")를 할 수 없는 건), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mimuro_syunya/items/3bb60dc777472a9bba76텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)