2013-03-15 22 views
3

我需要在包含c-string wchar_t的C++程序向量中使用。 我試圖使它如此:如何在C++中聲明wchar_t []的向量?

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

不幸的是原始陣列不匹配*爲一種元素類型std::vector的要求,由於數組類型的許多古怪。

如果你真的想固定大小的數組,你應該使用std::array<wchar_t,SIZE>,作爲std::array模板修復了原數組的問題,而是產生行爲像一個適當的值(例如,一個std::array<wchar_t,SIZE>是分配的,而原數組不是)對象。

但是,如果你想要字符串數據和字符串不會都是相同的固定大小,那麼你根本不應該使用數組。你應該最有可能使用std::wstring

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


*除非我記錯了,它實際上根據C++ 11規範說std::vector<wchar_t[100]> v(100);因爲僅僅這樣做不會對任何要求是合法的元素類型除了它是默認可構造的,哪些數組是。但是對v做大多數有用的事情需要元素類型比數組提供的更多。

2

你不能在C++中聲明數組的向量。一種方法是將數組放入結構中,然後在你的向量中使用該結構。

struct WCharArray 
{ 
    wchar_t a[SIZE]; 
}; 

vector<WCharArray> string_list(100); 
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; 
+0

數組不可分配,這是向量中的類型的要求。 – 2013-03-15 23:18:33