파이문

[C++] string의 length는 함수다. 본문

트러블 슈팅

[C++] string의 length는 함수다.

민Z 2017. 2. 21. 23:24

스크립트 언어하려다가 컴파일 언어 하려니 정말 에러가 많이 난다. "왜 이게 안돼?" 하는 느낌이라고 해야할까? 반대로 컴파일 언어 하다가 스크립트 언어하는 사람은 "이걸 왜 안해?" 하는 느낌이겠지.


아무튼간에 string 에서 특정 캐릭터 값만을 카운트하는 함수를 작성하는데 다음과 같이 에러가 났다.

(환경은 windows 10에서 visual studio 2015이다.)

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

static int stringCounter(std::string inputS, char charS) {
	
	int count = 0;
	for (int i = 0; i < inputS.length; ++i) { // inputS.length() OK
		if (charS == inputS[i]) {
			count++;
		}
	}
	return count;
}
int main()
{
	int number;
	number = stringCounter("Hello World!", 'o');
	cout << number << endl;
	return 0;
}
  • 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::length': 비표준 구문입니다. '&'를 사용하여 멤버 포인터를 만드세요
  • '<': 'unsigned int (__thiscall std::basic_string<char,std::char_traits<char>,std::allocator<char>>::* )(void) noexcept const'에서 'int'(으)로 변환되지 않았습니다.

기본 서적을 읽고는 있는데 Hello World 까지 밖에 안 찍어봐서..


우선 inputS.length 하면 string의 length(integer)가 리턴되기를 기대했지만 알고보니 함수였다. 그래서 함수로 바꿔주니까 제대로 2가 출력되는 것을 확인하였다.


파이썬은 클래스의 getter와 setter에서 함수로 구현하지 않고 프로퍼티를 사용해서 구현하기 때문에 어떤 거는 함수로 불러야 하고, 어떤 거는 그냥 바로 불러도 된다. 그래서 헷갈리지 않았을까..생각이 든다.


참고로 파이썬에서 length는 len() 이라는 함수가 존재하고 C로 구현되어 있어서 빠르다. 






Comments