STL과 함께 사용할 C++ 사용자 정의 할당기를 작성하고 있습니다. 클래스 정의에 다음 코드를 추가하면 컴파일됩니다.C++ STL 메모리 할당 자 컴파일 오류
#include "MyAlloc.hpp"
#if 1
template <typename T>
typename MyAlloc<T>::pointer
MyAlloc<T>::allocate(size_type n, MyAlloc<void>::const_pointer p) {
void *ptr = getMemory(n*sizeof(T));
typename MyAlloc<T>::pointer tptr = static_cast<MyAlloc<T>::pointer>(ptr);
return tptr;
}
#endif
그러나이 코드를 별도의 .cpp 파일에 넣으면 다음 오류가 발생합니다. 내가 도대체 뭘 잘못하고있는 겁니까? 오류는 static_cast 행에 있습니다.
g++ -c MyAlloc.cpp
MyAlloc.cpp: In member function ‘typename MyAlloc<T>::pointer MyAlloc<T>::allocate(size_t, const void*)’:
MyAlloc.cpp:9: error: expected type-specifier
MyAlloc.cpp:9: error: expected `>'
MyAlloc.cpp:9: error: expected `('
MyAlloc.cpp:9: error: expected `)' before ‘;’ token
make: *** [MyAlloc.o] Error 1
PT
-1. 컴파일러 오류와 관련된 질문과 다른 질문에 답합니다. 헤더에 템플릿을 정의하지 않으면 링크 오류가 발생하지만 링크가 시도되지 않습니다. –
아니요, 컴파일러 오류입니다. 해당 번역 단위 내에 템플릿이 정의되어 있지 않으면 컴파일러에서 해당 템플릿을 컴파일 할 수 없습니다. 헤더 파일은 여러 구현 파일에서 함수/클래스/변수 이름을 유지하기위한 용도로 사용됩니다. –
본질적으로 말하면, 정의되지 않은 함수 호출 (존재하지 않는 함수 호출)은 링커 오류입니다. 그렇지 않습니다. –