2012-02-24 2 views
0

현재 벡터 클래스의 생성자 함수를 구현하고 있습니다. (교수는 할당자를 사용하는 모든 것을 생략 할 수 있다고 말했습니다.) 함수의 형식을 결정하기 위해 교수가 준 참조 웹 사이트를 사용했습니다. http://www.cplusplus.com/reference/stl/vector/vector/construct vector C++

내 기능에 약간의 오류가 있습니다. 오류의 두 가지이다 :

구문 오류 : 식별자 '말하자면 size_type'

'값': 선언되지 않은 식별자

나는 이러한 오류를 얻는 것이 왜 어떤 생각? 여기 내 코드는 다음과 같습니다.

explicit vector (size_type n, const T& value= T()) 
{ 
    my_vect=new int x[2*n]; 
    for(int i=0; i<n; i++) 
    { 
     vect[i]=value; 
     length++; 
    } 
} 
+0

방법이 코드를 컴파일로 모든 것을 장식해야합니까? 어떤 시스템을 Windows 또는 Linux에 있습니까? 어떤 컴파일러를 사용하고 있습니까? 올바른 라이브러리를 포함 시켰습니까? 이들은 모두 대답해야하는 질문입니다. – pyCthon

+0

Microsoft Visual Studio에서 같은 문제를 컴파일하고 있습니다. size_type을 size_t로 바꾸면 잘 컴파일됩니다. 어쨌든 Size_t는 더 일반적으로 사용되는 것 같습니다. – Owl

답변

1

클래스를 .h 파일로 정의하면 = T()이 기본값입니다. .cpp 또는 .cc 파일에 메서드를 구현하면 기본값을 사용하지 않습니다.

size_type이 전역 범위에 있지 않으므로 해결 연산자를 사용하여 올바른 범위를 지정해야합니다. std::string::size_type 인 것으로 보입니다. 이것은 아마도 size_t의 typedef 일 것입니다. 나는 STL 컨테이너에서 size_type을 본다. 그러나 나는 내 자신의 클래스를 만들 때 그것을 사용한 적이 없다. 디트 마르 KUHL가 언급 한 바와 같이 C++ 템플릿을 사용하는 경우도

는, 당신은 template <typename T>

1

이 코드 조각은 상당히 부족합니다. 이로 인해 문제가 어디에 있는지 알 수 없습니다. 오류 메시지에서 최소한 사용자가 size_type을 정의하지 않은 것으로 보입니다. 또한 내가 당신이 라인에서 생성자를 정의하려고 생각하는하게 정의되지 않고는이 같이 보일 것 T 것처럼 보인다 : int 대의

template <typename T> 
vector<T>::vector(size_type n, T const& value): 
    my_vect(new T[2u * n]), 
    length(n) 
{ 
    for (size_type i(0); i != n; ++i) { 
     my_vect[i] = value; 
    } 
    // or: std::fill_n(my_vect, n, value); 
} 

이 또한 몇 가지 오류를 수정 (사용 T, vectmy_vext, length의 초기화되지 않은 사용). C++에서 변수를 증가시키는 관용적 인 방법은 사전 증가를 사용하는 것입니다 (예, 관용적 인 용도 이외의 다른 이유로 언어는 실제로 "++ C"라고해야합니다).

+0

"size_type"은 STL 컨테이너에 대해 예상되는 많은 유형 중 하나입니다. 일반적으로 size_t에 대한 typedef입니다. 이들의 전체 목록은 Katelyn Sapio가 앞서 언급 한 링크에 있습니다. http://www.cplusplus.com/reference/stl/vector/ –