template 사용하는데 컴파일 에러원인.

프로그래밍 일반에 관한 포럼입니다.

Moderator: 류광

Locked
청키
Posts: 99
Joined: 2004-10-04 19:28
Location: 에이알맥스
Contact:

template 사용하는데 컴파일 에러원인.

Post by 청키 »

안녕하세요..

template 으로 다음과 같은 클래스를 만드는데.. vc 6.0 에서
다음과 같은 에러가 나오는데 어떻게 해결해야지 모르겠습니다. 조언좀 부탁바랍니다.
:\vss_project\quark\dimension\tunit.h(53) : fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 1794)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information
D:\VSS_Project\Quark\Dimension\Dimension.cpp(1240902) : see reference to class template instantiation '<Unknown>' being compiled

소스는 다음과 같습니다.

Code: Select all

template<class _TX, class _Dim, double _Unit>
struct TUNIT : public TQuantity<_TX,_Dim>
{
	typedef TQuantity<_TX,_Dim> value_type;

public:

	TUNIT(_TX _value=0.) : m_unit(_Unit), value_type(_value)
	{
	}

	template<double _otherUnit>
	TUNIT(TUNIT<_TX,_Dim, _otherUnit> const& _nUnit) 
	{
	}


private:
	
	double m_unit;
};
분명히 다음부분 때문에 에러나는 건데,
생성자에서 _Unit값이다른 type을 받고 싶은건데요.. 혹시 아는시분 알려주시면 감사하겠습니다.

Code: Select all

	template<double _otherUnit>
	TUNIT(TUNIT<_TX,_Dim, _otherUnit> const& _nUnit) 
	{
	}
mika
Posts: 537
Joined: 2005-01-17 22:42

Post by mika »

vc 6.0은 템플릿 지원이 부실해서 올바른 코드일지라도 에러를 뱉는 경우가 자주 있는 걸로 알고 있습니다. (stl도 6.0에선 제대로 지원을 하고 있지 못 하죠.)
7.0 이상의 컴파일러에서 테스트 해보세요..
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

일단... 현재 C++ 표준에서 비형식 템플릿 인수로 double 같은 부동소수점 형식은 사용할 수 없습니다. 따라서 위의 코드가 적법한 코드가 아닌 것은 확실합니다. 그러나 그게 INTERNAL COMPILER ERROR를 일으킬 정도의 문제는 아닐텐데요. 이 부분은 mika님 지적처럼 VC 6.0의 문제일 것입니다.

혹시 모르니 변수 이름들을 유효한 이름으로 바꾸고 다시 시작해 보시길... 사용자가 작성한 코드에서 _로 시작하는 이름은 유효한 식별자 이름이 아닙니다.
청키
Posts: 99
Joined: 2004-10-04 19:28
Location: 에이알맥스
Contact:

Post by 청키 »

답변 감사합니다. 지금 확인해 보니 2003에서는 잘 되네요...

vc 6.0이 제대로 지원안되긴 하나.. vc 6.0에서 되게 하는 다른 방법은 없을까요?

vc6.0 을 주로 쓰기 때문에 vc.60에서도 저 클래스를 쓰고 싶어서 그렇습니다.
비회원

템플릿 파라미터(매개변수)..

Post by 비회원 »

C++ 기초 플러스 4판의 p.888을 잠깐 봤는데요
정수형, 열거형, 참조, 포인터만 허용된다는 듯 합니다.
정확한 내용은 아니니 제대로 읽어보시길..
Locked