Visual Studio 2013在语言数组上有点奇怪,在全局函数中它允许将其初始化为char result[100] = { 0 };
,但如果它是一个类的成员则不会至
int m_array[3];
,对于class A
内的A() :m_array{ 0, 1, 2 } {}
,std::array<int, 3> m_array;
失败,错误为C2536:&#34;&#39; A :: A :: m_array&#39; :无法为数组指定显式初始化程序&#34;。
在同一篇文章Workaround for error C2536: cannot specify explicit initializer for arrays in Visual Studio 2013中,使用
A() : m_array ({ 0, 1, 2 }) {}
代替和initilzie
A() : m_array ({ { 0, 1, 2 } }) {}
,IDE红色下划线&#34; 0&#34;提示&#34; 错误:此子对象初始值设定项不能省略大括号。&#34;但可以编译。
更好的是,a work-around is suggested建议使用额外的一对括号
std::array
,现在一切顺利!
要将char *
传递给需要my_array.data()
参数的函数,one comments建议使用my_array
,std::array
为_spitpath_s
。
现在我遇到了char *
的问题:
传统的_splitpath_s(fullpathfilename, drive, dir, name, ext)
样式编译
char
其中参数都是std::array
个数组;但使用class B2
{
public:
const int MAX_LEN = 200;
std::array<char, 200> drive, dir, name, ext;
B2() :drive({ { 0 } }), dir({ { 0 } }), name({ { 0 } }), ext({ { 0 } }) {}
void split(const char * fullpathfilename) {
_splitpath_s(fullpathfilename, drive.data(), dir.data(), name.data(), ext.data()); //error C2660: '_splitpath_s' : function does not take 5 arguments
}
};
将触发错误C2660:
_splitpath_s
为什么stdlib.h
在这里失败?这是一个旧的C风格函数,在foreach ($array as $key => $value){
$array[$key] = "New Value";
}
中定义,如果在C ++中解决这个问题,也是可以接受的。
答案 0 :(得分:2)
_splitpath_s
的5参数版本是模板函数,期望输入路径的字符指针,以及其他4的C样式字符数组。因为您传入了C ++ array
个对象,模板没有生成,由于SFINAE,它不可用,因此没有任何函数需要5个参数。
要使用它,您必须使用9参数版本,您可以在其中传入输入地址和缓冲区大小。