2012-10-01 32 views
0

MEA CULPA:std :: string數組的初始化器太多了

好吧,我錯了。我發現了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項是問題。

END NEW,情報:

我有這個模糊的記憶,對於人物的一些默認數量爲std :: string申報預分配的空間,所以我想懷疑類似行爲的字符串數組。

所以,這是問題。我應該如何正確地聲明這一點?希望不必硬聲明m_datatypenames的大小?

+0

我懷疑'9'是一個很大的線索! :) –

+0

在類定義中如何定義m_datatypeName? –

回答

6
std::string m_datatypeName[9] 

大概應該是

std::string m_datatypeName[10] 

"", "STRING", "TIME", "MACADDRESS", "IPADDRESS", "STRINGSET", "SET", "UINT32", "INT32", "BOOL"加起來10個值。

+0

但是沒有9!什麼是9(或更少)的魔術對10來說不是魔術? –

+0

@WesMiller在'VarInfo'裏面'm_datatypeName'是如何聲明的?在類定義中?那裏有9個? –

+1

它從某處獲得9 ...你是否檢查過類VarInfo? – swtdrgn

3

聲明爲:

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"); 
+0

沒有9!爲什麼我需要10個? –

+0

看我的文章。 –

2

您提供了std::string[9]的10個參數。

0

I have this vague recollection that a std::string declaration preallocates space for some default number of characters so i am want to suspect similar behavior for an array of strings.

呃,沒有。 T[]表現完全一樣,不管是哪種類型的T。如果你不想使用std::vector你將不得不硬編碼數組中的數字。