템플릿을 사용하는 방법과 연산자를 오버로드하는 방법을 배우고 있습니다. operator[]
에 오버로드를 처리했지만 operator+
및 operator=
오버로드 문제가 발생했습니다.연산자 '='와 '+'오버로드
'+': is not a member of 'A<T>'
'=': is not a member of 'A<T>'
'operator =' must be a non-static member
내가 잘못 뭐하는 거지 : 내가 컴파일하려고 Whenver
template <class T>
class A
{
public:
//...
friend A<T>& A<T>::operator+ (A<T>&, const A<T>&);
friend A<T>& A<T>::operator= (A<T>&, const A<T>&);
};
template<class T> A<T>& A<T>::operator+ (A<T>& left, const A<T>& right)
{
//some functions
return left;
}
template<class T> A<T>& A<T>::operator= (A<T>& left, const A<T>& right)
{
//some functions
return left;
}
, 나는 이러한 오류를 얻을 : 여기 내 코드는?
편집 :
나는 코드 업데이트 관리했습니다:
template <class T>
class A
{
public:
//...
A<T> operator+ (A<T>);
A<T> operator= (A<T>, const A<T>);
};
template<class T> A<T> A<T>::operator+ (A<T> right)
{
//some functions
return *this;
}
template<class T> A<T> operator= (A<T> right)
{
//some functions
return *this;
}
이 operator+
작품처럼 지금은 잘 보이지만 컴파일러는이 오류 제공합니다
'operator=' must be a non static member
왜 고정 회원입니까? 어떻게 고칠 수 있습니까? 우선 할당 사업자
는 함수 정의에서의' ::'범위를 제거합니다. –
아, 미안, 깜빡했다. 템플릿 매개 변수는 _ "상속 된"_ 선언을하지 않습니다.템플릿을 '템플릿 친구 A & operator + (A & const A &);' –
으로 설정해야합니다. 확실합니까? 컴파일러의 내부 오류가 발생했습니다 : P 신경 쓰지 마라. 여전히 'not member'오류를 생성한다./ – Executor1909