2012-02-24 113 views
0

我目前正在爲向量類實現構造函數(我的教授說我們可以省略任何使用分配器的東西)。我用我的教授給我們的參考網站來確定函數的格式:http://www.cplusplus.com/reference/stl/vector/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 2012-02-24 00:29:46

+0

我在Microsoft Visual Studio下編譯相同的問題。用size_t替換size_type,它編譯得很好。無論如何,Size_t似乎更常用。 – Owl 2016-09-01 14:48:27

回答

1

如果您在.h文件中定義類,那麼= T()是默認值。當您在.cpp或.cc文件中實現該方法時,不需要使用默認值。

size_type不在全局範圍內,因此您需要使用解析運算符來給出正確的範圍。它似乎是std::string::size_type。這可能只是size_t的一個typedef。我在STL容器中看到了size_type,但是我在創建自己的類時從未使用它。

而且,迪特馬爾·庫爾提到的,使用C++模板時,你需要template <typename T>

1

這段代碼缺乏相當多的上下文。這使得很難分辨問題出在哪裏。從錯誤消息看來,你至少還沒有定義size_type。它還看起來好像T沒有定義這讓我覺得你嘗試定義構造函數脫節的,但是這將是這個樣子:

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); 
} 

這也修正了一些錯誤(使用int對的T,vectmy_vext,未初始化的使用length)。請注意,在C++中增加變量的慣用方式是使用預增量(是的,由於更多原因,語言實際上應該被稱爲「++ C」),而不僅僅是習慣用法。

+0

只是想指出:「size_type」是STL容器的許多預期類型之一。它通常只是size_t的typedef。他們的完整列表在Katelyn Sapio之前提到的鏈接上:http://www.cplusplus.com/reference/stl/vector/ – 2012-02-24 01:12:15