МОЯ ВИНА:
Хорошо я ошибся Я нашел объявление 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" };
НОВАЯ ИНФОРМАЦИЯ:
NB: в заявлении нет ни 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");
Вы даете 10 параметров для std::string[9]
,
У меня есть смутное воспоминание, что объявление std :: string
предварительно распределяет пространство для некоторого количества символов по умолчанию, поэтому я хочу
подозревать подобное поведение для массива строк.
Нет T[]
ведет себя точно так же, независимо от того, какой тип T
, Если вы не хотите использовать std::vector
вам придется жестко закодировать номер в массиве.