2017-01-09 3 views
1

私のクラスのメンバはstd:arrayのベクトルになりますが、クラスのユーザによって渡された変数によって配列のサイズを決定します。これは可能ですか?私は、初期化子リストでそうしようとしましたが、私は非常に明白なエラーメッセージが出ます:実行時にサイズが決定された静的配列のベクトル

#include <vector> 
#include <array> 

typedef long double lDouble; 

class Parser { 
    const size_t featureCount; 
    std::vector<std::array<lDouble, featureCount> > data; 
    public: 
     Parser(size_t numFeatures) : featureCount(numFeatures) {} 
}; 

注:ここでは

csvParser.cpp:18:35: error: invalid use of non-static data member ‘Parser::featureCount’ std::vector<std::array<lDouble, featureCount> > data; 

は私の試みだが可能であれば、私はのユーザーのための希望します配列のサイズを決定するために値を渡すことができるクラスですが、私の試みはが何であるかを示すものではありません。

+1

が病気に短くなり、STDの大きさは::配列を使用すると、ネストされたコンテナを使用して喜んでいる場合、一方の時間値 –

+1

をコンパイルする必要があり、なぜあなたはベクトルのベクトルに落ち着くいけませんか? –

+0

'sizeof(std :: vector )'が 'sizeof(T)'によって異なるとします。 (これはほとんど確かではありませんが、それを禁止するルールはありません)あなたがこれを行うことが許されていれば、 'sizeof(Parser) 'はどうなりますか? –

答えて

-1

std :: arrayは、Cスタイルの配列を使用して実装されています。そのため、実行時にサイズを判断できません。 実行時にサイズを変更する配列が必要な場合は、std :: vectorを使用するか、次のメソッドを使用します。

class Parser 
{ 
private: 
    size_t size; 
    std::vector<lDouble*> data; 

public: 
    Parser(const size_t& size) 
     : size(size) 
    { 
     lDouble* arr = new lDouble[size]; 
     data.push_back(arr); 
    } 
}; 
+1

Eww。ベクターによる手動メモリ管理?!?あなたは 'のstd ::ベクトル<はstd :: unique_ptrを>' – NathanOliver

+0

@NathanOliverのTHX良いアイデアを持つほうが良いでしょう – kmc7468

関連する問題