3

我需要在包含 wchar_t 的 c 字符串的 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对元素类型的要求。

如果你真的想要固定大小的数组,你应该使用std::array<wchar_t,SIZE>,因为std::array模板修复了原始数组的问题,而是生成像正确值一样的对象(例如,astd::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++ 中声明数组向量。一种方法是将数组放入结构中,然后在向量中使用该结构。

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 回答