2015-01-24 1 views
0

지금이 이일에왔다에 대한 템플릿 인수 목록이 필요합니다.사용</p> <p>나는 C++에서 초보자 오전과 문제가 있어요 ... 배열

최소한 필요한 코드 만 넣을 것입니다.

template <typename Type> 
class Array { 
     public: 

     *//stuff* 

     Array operator= (Array const &); 
}; 

template <typename Type> 
Array& Array<Type>::operator=(Array const &rhs) {  //ERROR #1 here 

*//stuff* 

}              //ERROR #2 here 

나는 다음과 같은 두 오류
을 얻고있다

'배열': 클래스 템플릿의 사용은 필요 템플릿 인수 목록
'배열 :: 연산자 ='기존 선언에 함수 정의와 일치 할 수없는

도와주세요.

가 첫 번째 오류 체크를위한 사전

+0

가능한 중복 [클래스 템플릿의 사용은 템플릿 인수 목록이 필요합니다] (http://stackoverflow.com/questions/13477086/use-of-class-template-requires-template-argument-list) –

+0

@MohitJain 아니, 정확한 복제본이 아니야. 오류 메시지는 같지만 문제는 다른 해결책이 필요합니다. – cdhowie

답변

4

반환에 argmunets <>

이 있어야합니다 단지 배열의 배열을 사용할 수 없습니다 정의 유형을 명시 적으로으로 철자해야합니다.. 이는 컴파일러가 멤버 정의의 컨텍스트에 있음을 알기 전까지는 Array<Type>::이므로, 템플릿 인수가없는 경우 Array을 사용할 수 없기 때문입니다. 이 구문은 컴파일러가 정의에 어떤 상황을 알고 후 반환 형식 을 지정하기 때문에

template <typename Type> 
Array<Type>& Array<Type>::operator=(Array const &rhs) { 
// ^^^^^^ 

다른 방법으로는, 템플릿 인수없이 Array 이름의 사용을 허용하는 C++ (11)의 auto 구문을 사용할 수 있습니다.

template <typename Type> 
auto Array<Type>::operator=(Array const &rhs) -> Array& { 
//            ^^^^^^ 
// This works because the compiler has already encountered "Array<Type>::" 
+0

감사! C++ 11을 배운 적이 없으므로 처음 부분 만 살펴 보았습니다. 그것은 작동합니다. – Dan

0

에 감사이

Array<Type>& Array<Type>::operator==(Array<Type> const &rhs) 

당신은 클래스

Array<Type> operator=(Array <Type> const &){} 
+2

'Array '인스턴스화 * 문맥 안에서 타입 인자 *없이'Array'를 사용할 수 있으므로 인자에 사용할 필요가 없습니다. ('Array const &'는 거기에서 완벽하게 유효하다.) 문제는 컴파일러가 'Array ::'을 볼 때까지 우리가'Array '인스턴스화의 컨텍스트에 있다는 것을 아직 알지 못하기 때문에 리턴 타입 C++ 11의'auto' 리턴 타입 없이는이 단축키를 사용할 수 없습니다. – cdhowie

관련 문제