멤버함수 템플릿 operator*가 제대로 컴파일 되지 않습니다.
글쓴이: dltkddyd / 작성시간: 금, 2014/06/06 - 10:08오후
*연산자를 외부로 빼서 정의해서 컴파일 하면 계속 컴파일 오류가 뜹니다. 소스는 다음과 같은데요.
//-test6.h- template<class T> class Rational { public: int numerator; int denominator; Rational(int _numerator, int _denominator); Rational(const Rational<T>& right); /*template<class R=T> const Rational<R> operator*(const Rational<R>& right) { return Rational<R>(numerator*right.numerator, denominator*right.denominator); }*/ template<class R=T> const Rational<R> operator*(const Rational<R>& right) {}; }; template<class T> Rational<T>::Rational(int _numerator=0, int _denominator=1):numerator(_numerator),denominator(_denominator) {} template<class T> Rational<T>::Rational(const Rational<T>& right):numerator(right.numerator),denominator(right.denominator) {} template<class T> template<class R=T> const Rational<R> Rational<T>::operator*(const Rational<R>& right) { return Rational<R>(numerator*right.numerator, denominator*right.denominator); } //바로 위의 템플릿 멤버함수에서 컴파일이 안 됩니다. -test6.cc- #include <iostream> using namespace std; #include "test6.h" int main() { Rational<int> obj1(4,5); //Rational<int> obj2=obj1*3; //cout<<obj2.numerator<<" "<<obj2.denominator<<endl; //obj1*3; return 0; }
Forums:
해결했습니다.
클래스 안의 선언부에서
template
const Rational operator*(const Rational& right) {};
아니라
template
const Rational operator*(const Rational& right);
군요.
그래도 역시 컴파일 에러가 나서 다시 다음과 같이 수정하고 컴파일 하니 오류가 안 나네요.
template
template
const Rational Rational::operator*(const Rational& right) {
return Rational(numerator*right.numerator, denominator*right.denominator);
}
그런데 T와 R이 같도록 하려면 어떻게 해야 하죠?
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
댓글 달기