3

wchar_tのc-stringを含むC++プログラムベクトルで使用する必要があります。私はそれをそうしようとしました:

using std::vector;

vector<wchar_t[SIZE]> string_list(100);

しかし、次の単語を含む大きなエラー出力が表示されます。

error: functional cast to array type «std::vector<wchar_t [512]>::value_type {aka wchar_t [512]}»

私は間違って何をしますか?なぜこのようなエラーが発生するのですか?

4

3 に答える 3

5

std::vector残念ながら、配列型には多くの奇妙な点があるため、生の配列は要素型に対する*の要件と一致しません。

テンプレートがraw配列の問題を修正し、代わりに適切な値のように動作するオブジェクトを生成するため、固定サイズの配列が本当に必要な場合はstd::array<wchar_t,SIZE>、を使用する必要があります(たとえば、aは割り当て可能ですが、raw配列は割り当てられません)。std::arraystd::array<wchar_t,SIZE>

ただし、文字列データが必要で、すべての文字列が同じ固定サイズにならない場合は、配列をまったく使用しないでください。ほとんどの場合、以下を使用する必要がありますstd::wstring

std::vector<std::wstring> string_list;


*私が間違っていない限り、C ++ 11仕様によれば、std::vector<wchar_t[100]> v(100);これを単独で行うことは、デフォルトで構築可能な配列であることを除いて、要素タイプに要件を課さないため、実際には合法です。ただし、で役立つほとんどのことを行うにvは、配列が提供するよりも多くの要素タイプが必要です。

于 2013-03-15T23:18:53.207 に答える
2

C++では配列のベクトルを宣言できません。1つのアプローチは、配列を構造体の中に入れてから、その構造体をベクトルの中で使用することです。

struct WCharArray
{
  wchar_t a[SIZE];
};

vector<WCharArray> string_list(100);
于 2013-03-15T23:10:31.160 に答える
2

vector配列は奇妙なので、配列を作成することはできません。

代わりにいくつかのオプションがあります。

  1. 文字列が静的な場合は、ポインタのベクトルを使用できますvector<wchar_t*>
  2. 配列のベクトルが本当に必要な場合は、配列を構造体にラップします。
  3. 可能な場合は、arrayテンプレートを使用できますvector< array<wchar_t, SIZE> >

オプション2は次のようになります。

struct WArray
{
    wchar_t s[SIZE];
};
vector<WArray> string_list;
于 2013-03-15T23:16:19.010 に答える