반응형
typename 키워드
- 템플릿 정의에서 알 수 없는 식별자가 형식(Type)이라는 것을 컴파일러에게 알려줍니다.
- 템플릿의 타입 매개변수로 정의된 타입을 사용하는 선언문을 정규화하는데 사용합니다.
template <class T>
void func(const T& obj)
{
T::size_type _size;
}
위 코드는 아래와 같은 컴파일 에러를 발생시킵니다.
예를 들어 string 타입을 인자로 전달할 경우 string::size_type 타입을 사용하려는 의도이지만
T의 타입은 컴파일 과정에서 해당 함수 호출 시점에서 정해지기 때문에 미리 컴파일러에게 T::size_type이 타입이라는 것을
알려주어야 합니다.
따라서 아래와 같이 사용하면 typename 키워드와 함께 사용하면 정상적으로 컴파일이 됩니다.
template <class T>
void func(const T& obj)
{
typename T::size_type _size;
}
참고)
https://docs.microsoft.com/ko-kr/cpp/cpp/typename?view=vs-2019
'C,C++ > Error & Warning' 카테고리의 다른 글
[C++] 함수 템플릿 특수화 관련 링크 에러 | LNK1169, LNK2005 (0) | 2020.03.02 |
---|---|
[C++] LNK2001, LNK1120 링크 오류 (static 관련) (0) | 2020.02.04 |
[C++] C2572 컴파일러 오류. redefinition of default argument (0) | 2020.01.11 |
[C++] LNK2019, LNK1120 클래스 템플릿 사용 시 링크 오류 (0) | 2019.11.28 |
[C/C++] 메모리 동적할당 시 malloc을 사용한다면 / dereferencing NULL pointer, Warning C6011 (0) | 2019.11.24 |
댓글