2014-05-17 2 views
1

나는 문제에 직면하고 내가 포함 할 Mystackt의 공용 부분 내부의 전체 클래스를 반복자 클래스로 사용 MyIterator {}; 나는 그렇게 간단히 지금일부 헤더 파일에 대한 CPP 파일에 내 구현을 포함하는 방법 (중첩 된 클래스)

template <class Type> /* that's in file **MyTemplate.h** */ 
class MyStackt 
{ 
friend somefunction (int,string,bool); 
public: 

class iterator 
{ 
public: 
iterator(); 
void somefunc(param1,param2.....); 
void otherfunc(...); 
private: 
Type* ptr; 
}; 

int public_func_of_stackt(void); 
void an-otherfunc(int,string,Type,...etc); 
private: 
int x; 
string y;Type* val; 
}; 

나는 모든 구성원에 대한 코드를 포함 할 수의이 헤더 CPP 파일 MyTemplate.cpp 을 그가를 볼 수 있도록 다음과 같이 나타납니다 내 헤더 파일 MyTemplate.h 이 물건을 모두 썼다 예를 들어 문제 없이에 MyTemplate 클래스의 -functions : 내가 전체 클래스 (반복자 클래스)의 멤버-기능의 구현을 작성하려고 할 때

template <class Type> 
int MyStack<Type>::public_func_of_stackt(void) /*this works perfect*/ 
{implementation goes here ...;}  

을하지만 문제는

시작
template <class Type> 
bool MyStackt<Type>::iterator somefunc(param1,param2.....) 
{ return current ==rhs.current; } 

질문은 : 어떻게 Mytemplate.cpp 파일 안에 클래스 반복자의 멤버 함수에 대한 코드를 포함시킬 수 있습니까 ?? 어떻게 그 외부 :: :: 전체 또는 다른 특정 표기법을 사용하여 작성해야합니까? 다른 질문 : 어떻게 MyStackt 클래스의 friend 함수에 대한 구현을 (Mytemplate.cpp 파일에서) 작성할 수 있습니까 ??

갱신 # 1 : 당신

베리타스

감사하지만 난 또한 클래스의 일부 공공 기능을 정의하는 방법을 알 필요가 MyStackt 그 함수는 반복자 타입을 반환 (그래서 전체 클래스의 객체를 반환하는) 경우

정의는

template <class Type> 
iterator Stackt<Type>::begin() 
{ return *this; } /*this function did not work*/ 

어쩌면 내가 일부 특정 표기 4 그것을 사용할 필요가 같을 것인가? 여러 개의 중첩 클래스가있는 경우에는 전문가의 답변을 기다리는 미리 감사하십시오!

+0

내 편집을 확인하려면. – Veritas

+0

템플릿 MyStackt 클래스와 iterator 클래스는 크기가 커서 생성자와 함수가 여러 개 있습니다. 내 코드를 분리 된 파일로 옮겼으므로 나중에 쉽게 유지 관리 할 수 ​​있습니다. 반복자 객체를 반환하는 MyStackt의 함수 완벽하게 작동합니다. 당신이 을, 표준으로 내가 인라인 내부 MyStackt scope 특성 자신의 코드를 작성하지만 난 템플릿 반복자 Stackt :: 시작 CPP 및 .H 파일에이 코드를 이동하려고하면서 문제가 이러한 종류의 코드와 함께() {return * this; } 나는 MyStackt :: 반복자 표기법을 시도, 그것이 내가 구문 오류가 작동하지 않습니다 – user3647977

+0

:: 반복자가 : (시작) {...} – Veritas

답변

1

somefunc를 정의 할 때 범위 분석 연산자를 잊어 버렸습니다. 정의는 다음과 같아야합니다.

template <class Type> 
bool MyStackt<Type>::iterator::somefunc(param1,param2.....) 
{ 
    return current == rhs.current; 
} 

친구 기능은 다른 전역 기능과 마찬가지로 정의합니다. 당신의 편집으로

:

반복자 클래스는 MyStackt의 범위에 속한다는 그래서 당신은 당신이 범위 연산자를 사용할 필요가 MyStackt에서 그것을 언급해야 할 때마다. 귀하의 질문에 관해서는 당신이 무엇을하려고하는지 잘 모릅니다. * 이것은 MyStackt 유형의 인스턴스화 된 객체를 반환합니다.

주의하십시오. 정의를 분리하려는 경우 cpp 파일이 아닌 .inl 파일 또는 이와 유사한 것을 사용하십시오.

관련 문제