멤버함수 템플릿 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이 같도록 하려면 어떻게 해야 하죠?
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
댓글 달기