C++ template 에러 질문드립니다.
글쓴이: phyljh / 작성시간: 목, 2022/04/28 - 10:37오전
C++ template프로그래밍 공부하다가 이유를 모르겠어서 고수분들께 질문드립니다.
아래는 CRTP라는 것을 공부해보려고 테스트로 짜본것인데 아래처럼 클래스의 멤버변수로 T a; 이렇게 선언하면
컴파일에러가 나는데 static 함수안에 T c; 이렇게 선언하면 컴파일이 됩니다.
무슨 차이점이 있는것인가요?
도움 부탁드립니다.
#include <iostream> using namespace std; template<typename T> class Base { // T b; <---- error: ‘Base<T>::b’ has incomplete type public: static T* getInstance() { T c; <---- 이거는 괜찮고 T* a = new T(); return a; } }; class AAA : public Base<AAA> { }; int main() { AAA * pa = AAA::getInstance(); return 0; }
Forums:
표준문서 들고 와서 이론을 따져봐도 재밌기야
표준문서 들고 와서 이론을 따져봐도 재밌기야 하겠습니다만...
Base가 T a를 멤버 변수로 가지고, class AAA가 Base를 상속받게 만들면
(1) AAA instance는 Base를 상속받아 포함하고
(2) Base instance는 AAA를 멤버 변수로 포함하는 꼴이 되는데
대충 봐도 안 될 거 같지 않습니까??
class Base를 제대로 사용하는 것이 아니라
class Base를 제대로 사용하는 것이 아니라 static 함수로 C 방식처럼 호출하는 것이 보여요.
class Base에 인터넷을 참조해서 생성자를 정의해서 해 보세요.
T b; 당연히 되야 해요.
댓글 달기