템플릿 클래스의 변수에서 벡터 반복기를 어떻게 반환합니까?
문제
나는 템플릿 클래스에서 벡터의 반복기를 반환하려고 노력하고 있습니다 (차이가 있는지 확실하지 않지만 그것을 읽었으므로 언급 할 것이라고 생각했습니다). 문제는 C ++에 대한 오류가 발생한다는 것입니다. 나는 온라인을보고 포럼과 설명에서 볼 수있는 것에서 내가 생각하지 않는다고 생각하지 않는다. 저것 멀리서, 그것은 단지 컴파일하지 않을 것입니다.
template<class T>
class Table
{
public:
...
vector<shared_ptr<vector<T>>>::iterator GetRowIterator();
//vector<shared_ptr<vector<CellValueType> > >::const_iterator GetRowIterator();
...
protected:
vector<shared_ptr<vector<CellValueType> > > data; //outside vector is rows, inside vector is columns
...
};
vector<shared_ptr<vector<T> > >::const_iterator Table<T>::GetRowIterator()
{
return data.begin();
}
내가 얻는 오류는 다음과 같습니다.
error C2146: syntax error : missing ';' before identifier 'GetRowIterator'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
편집하다:
엔드 각도 브래킷을 변경하여 동일한 오류가 발생하지 않도록했습니다.
이것이 왜 발생하는지에 대한 생각이 있습니까?
언제나 그렇듯이 조언/도움에 미리 감사드립니다!
해결책
또한 템플릿 의존적 반환 유형을 선언 할 때 타이프 이름을 사용해야합니다.
typename vector< shared_ptr< vector< T > > >::iterator GetRowIterator();
그리고 메소드 정의
typename vector< shared_ptr< vector< T > > >::const_iterator Table<T>::GetRowIterator()
{
return data.begin();
}
또한 클래스 정의 밖에서 템플릿 클래스 메소드를 정의 할 때는 템플릿 키워드를 사용해야합니다.
template <class T> typename vector< shared_ptr< vector< T > > >::const_iterator Table<T>::GetRowIterator()
{
return data.begin();
}
컴파일러가 T가 무엇인지 알 수 있도록.
다른 팁
이 부분은 다음과 같습니다.
vector<shared_ptr<vector<T>>>
C ++ 구문의 문제입니다.
vector<shared_ptr<vector<T> > >
이것은 새로운 표준에 의해 해결되고있는 문제입니다.
Lexer는 컴파일러의 첫 번째 단계이기 때문에 >>>는 이동 좌회전 연산자와 다음을 볼 수 있습니다. 따라서 코드에서 구문 오류가 발생합니다. 이 문제를 억압하려면> 템플릿을 닫을 때의 공백을 추가하면됩니다.
제휴하지 않습니다 StackOverflow