标准::字符串数组的初始值设定项太多
too many initializers for std::string array
MEA CULPA:
好吧,我错了。 我找到了 VarInfo::m_datatypeName[] 的声明,它是 VarInfo::m_datatypeName[9]。 是的,硬编码。 我向所有为我挠头的人道歉。
我收到此错误:
too many initializers for 'std::string[9]'
对于此声明:
std::string VarInfo::m_datatypeName[] = { "", "STRING", "TIME", "MACADDRESS", "IPADDRESS", "STRINGSET", "SET", "UINT32", "INT32", "BOOL" };
新信息:
注意:声明中没有9或10。 如果分配列表中的项目不超过九个,则工作正常。 问题是第 10 项。
结束新信息:
我有一个模糊的记忆,一个 std::string 声明为一些默认数量的字符预先分配空间,所以我想怀疑字符串数组的类似行为。
所以,这里有一个问题。 我应该如何正确声明这一点? 希望不必硬性声明m_datatypenames的大小?
std::string m_datatypeName[9]
应该是
std::string m_datatypeName[10]
"", "STRING", "TIME", "MACADDRESS", "IPADDRESS", "STRINGSET", "SET", "UINT32", "INT32", "BOOL"
最多 10 个值加起来。
将其声明为:
std::string m_datatypeName[10];
因为有十个字符串用于初始化数组,而不是九个。
如果要避免指定元素的数量,可以使用std::vector<std::string>
:
struct VarInfo
{
static std::vector<std::string> m_datatypeName;
};
如果 C++11,您可以使用初始值设定项大括号(http://ideone.com/mGS9H 演示):
std::vector<std::string> VarInfo::m_datatypeName
{
"", "STRING", "TIME", "MACADDRESS", "IPADDRESS",
"STRINGSET", "SET", "UINT32", "INT32", "BOOL"
};
或者,如果不是C++11,您可以使用boost::assign::list_of
:
#include <boost/assign/list_of.hpp>
std::vector<std::string> VarInfo::m_datatypeName =
boost::assign::list_of
("")("STRING")("TIME")("MACADDRESS")("IPADDRESS")
("STRINGSET")("SET")("UINT32")("INT32")("BOOL");
你为一个std::string[9]
提供了 10 个参数。
我有一个模糊的记忆,一个std::string声明 为一些默认数量的字符预分配空间,所以我想要 怀疑字符串数组的类似行为。
呃,没有。 T[]
的行为完全相同,无论T
类型如何。如果您不想使用std::vector
则必须对数组中的数字进行硬编码。
- 在没有太多条件句的情况下,我如何避免被零除
- 错误:字符数组的初始值设定项太多
- 对象实例化调用构造函数的次数太多
- Levenshtein 两个文件的距离花费了太多时间
- 我有三个 getline,但是一旦编译,输入就太多了
- 将使用太多的纹理插值器 - 带旋转的着色器
- C/C++:socket() 创建在循环中失败,打开的文件太多
- 使用Visual Studio在虚幻引擎中创建一个新的类c ++给了我太多的错误
- C++:数组<>初始值设定项太多
- GLib-ERROR:为GWakeup创建管道:打开的文件太多
- C++,从文件读取到结构,然后读取到向量(结构被推入向量太多次,而不仅仅是一次)
- 我会导致太多内存泄漏,以至于我的计算机无响应吗?
- ZeroMq:打开的文件太多.在同一对象上连续增长的fd使用数
- exe 上的字符串命令透露了太多
- 将字符串与数字进行比较,而无需编写太多运算符重载函数
- 整数/浮点数/字符串值之间的操作,组合太多
- 标准::字符串数组的初始值设定项太多
- 函数调用的参数太多,预期为 0,有 1。 "InfInt.h"字符串函数
- 当我输入字符串时,我的菜单重复了太多次
- 字符串有' '太多了