2010-02-02 78 views
10

我是一个编程的学生在我的第一个C++类,以及最近的一个项目我做,我无法创建一个字符串数组一样,我可以在C#中做到:C++是否支持字符串类型的常量数组?

string MONTHS[ARRAY_CAPACITY] = { "Jan", "Feb", "Mar", "April", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec" }; 
// this yields many compiler errors in C++ 

是否有可能做在C++中类似的东西?

谢谢!

+0

是什么ARRAY_CAPACITY?它是如何声明的。什么错误(通常是件好事)? 你真的想要一个'string'(object)数组,而不是c-string数组(char数组)吗? – Romain

+0

'#DEFINE ARRAY_CAPACITY 12' –

回答

14

如果初始化在C++数组那么它不需要要设定的尺寸(虽然它会接受一个),所以:

std::string months[] = { "Jan", "Feb", "Mar", "April", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec" }; 

编译正常使用g ++对我来说,我会期望它也可以在别处编译。我希望你的错误是由于缺少std::命名空间。

+1

我在ARRAY_CAPACITY宣言中遗失了冒号!数字,只要我张贴在这里我找出我的问题。对不起,有这样一个基本的问题打扰你的SO'ers。感谢您为我提供正确的语法! – Alex

6

是的,它的作用:

#include <string> 

int main(void) 
{ 
    static const size_t Capacity = 12; 
    std::string Months[Capacity] = { "Jan", "Feb", "Mar", "April", "May", 
             "June", "July", "Aug", "Sep", "Oct", 
             "Nov", "Dec" }; 
} 

你的错误是可能与别的东西。你记得使用std::吗?不知道,它可能是任何东西。是Capacity大小错误?等等

注意你的代码实际上并不是一个常量数组。这就是:

#include <string> 

int main(void) 
{ 
    static const size_t Capacity = 12; 
    static const std::string Months[Capacity] = { "Jan", "Feb", "Mar", "April", 
/* ^^^^^^^^^^^^ */         "May", "June", "July", "Aug", 
                "Sep", "Oct", "Nov", "Dec" }; 
} 

而且,你实际上并不需要Capacity,因为别人会显示出来,你可以使用const char*,如果你愿意,你虽然失去了std::string接口。

0

是的。只要编译器知道stringstd::string且只要{}之间的初始化程序数不超过ARRAY_CAPACITY,则在问题中使用的语法都是正确的。

当然,如果你想有一个常量数组,如标题所示,你应该已经声明它const。没有const如果将数组放入包含在多个翻译单元中的头文件中,您的数组将具有外部链接并导致链接器错误。

const std::string MONTHS[ARRAY_CAPACITY] = { "Jan", /* and so on ... */ }; 
2

为恒定字符串数组很可能是cstrings的阵列的优选方法,

const char* MONTHS[] = { "Jan", "Feb", "Mar", "April", "May", "June", "July", 
    "Aug", "Sep", "Oct", "Nov", "Dec" }; 

然而,也可以用标准::串进行,

const string MONTHS[] = { string("Jan"), string("Feb"), ... }; 

当您使用大括号初始化数组时,某些编译器可能不允许从char *到std :: string的隐式转换;明确地分配一个从char *构造的std :: string将会修复这个问题。

0

是的,Visual C++支持它 - 我刚刚做了类似的事情。不确定其他版本的C++。

你有收录图书馆吗? ARRAY_CAPACITY的定义是什么?

当你说'无法',你的意思是你有编译器/链接器错误或其他?你能提供更多细节吗?

0

我假设你想要使用std :: string,但在C++中这是不可能的。或者至少不是这么简单。 你可以用std :: string来替代简单的 const char * MONTH [ARRAY_CAPACITY] = {“Jan”,...}; 这可能已经成功了。

如果你真的想使用std :: string你可能想看看STL容器和boost库(www.boost.org)。特别是boost :: assign可以做类似你想做的事情。

问候, 迈克尔

相关问题