2012-02-24 3 views
0

私は現在、ベクトルクラスのコンストラクタ関数の実装に取り​​組んでいます(私の教授は、アロケータを使用するものは除外しています)。関数の形式を決定するために私の教授が私たちに与えた参照ウェブサイトを使用しました:私の機能にはいくつかのエラーがあります。エラーの二つがあります:コンストラクタベクタ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がありますが、独自のクラスを作成する際には使用していません。また

、ディートマーKühlが述べたように、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コンテナの多くの予想される型の1つです。通常、size_tのtypedefです。それらの完全なリストはKatelyn Sapioが以前に言及したリンクにあります:http://www.cplusplus.com/reference/stl/vector/ –