我需要在包含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]}»
我做错了什么? 为什么我会收到这样的错误?
答案 0 :(得分:5)
不幸的是,由于数组类型有很多奇怪的原因,原始数组不符合* std::vector
对元素类型的要求。
如果你真的想要固定大小的数组,你应该使用std::array<wchar_t,SIZE>
,因为std::array
模板修复了原始数组的问题,而是产生了像正确值一样的对象(例如,{{1}可分配,而原始数组不是)。
但是,如果你想要字符串数据并且字符串不是全部都是相同的固定大小,那么你根本就不应该使用数组。您最有可能使用std::array<wchar_t,SIZE>
:
std::wstring
*除非我弄错了,根据C ++ 11规范说std::vector<std::wstring> string_list;
实际上是合法的,因为单独执行此操作不会对元素类型提出任何要求,除非它是默认的可构造的,哪个数组是。但是,对std::vector<wchar_t[100]> v(100);
执行大多数有用的事情确实需要元素类型比数组提供的更多。
答案 1 :(得分:2)
您无法在C ++中声明数组向量。一种方法是将数组放在结构中,然后在向量中使用该结构。
struct WCharArray
{
wchar_t a[SIZE];
};
vector<WCharArray> string_list(100);
答案 2 :(得分:2)
你不能制作数组的vector
,因为数组很奇怪。
您可以选择多个选项:
vector<wchar_t*>
。array
模板:vector< array<wchar_t, SIZE> >
。选项2如下所示:
struct WArray
{
wchar_t s[SIZE];
};
vector<WArray> string_list;