Visual Studio 2013在語言數組上有些奇怪,它在全局函數中允許初始化爲char result[100] = { 0 };
,但不是如果它是類的成員 - Workaround for error C2536: cannot specify explicit initializer for arrays in Visual Studio 2013,對於int m_array[3];
裏面的class A
,A() :m_array{ 0, 1, 2 } {}
失敗並顯示錯誤C2536:「'A :: A :: m_array':無法爲數組指定顯式初始值設定項」。C2660:_splitpath_s在Visual Studio 2013中失敗,出現std :: array錯誤
在同一職位a work-around is suggested,使用 std::array<int, 3> m_array;
而不是與 A() : m_array ({ 0, 1, 2 }) {}
initilzie,IDE紅色下劃線「0」暗示「錯誤:括號不能爲這個子對象的初始化可以省略。」但可以通過編譯。
更好,one comments建議使用額外的一對大括號 A() : m_array ({ { 0, 1, 2 } }) {}
,現在一切順利!
要傳遞一個std::array
於需要char *
參數的函數,std::array over c style array建議使用my_array.data()
其中my_array
是std::array
。
現在我遇到了一個問題_spitpath_s
:
傳統char *
風格編譯 _splitpath_s(fullpathfilename, drive, dir, name, ext)
其中的參數都char
陣列;但使用std::array
將觸發錯誤C2660:
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
}
};
。
爲什麼_splitpath_s
在這裏失敗?這是一箇舊的C風格函數,在stdlib.h
中定義,如果在C++中有解決方法,也是可以接受的。
C和C++是不同的語言。請僅使用相關標籤(本例中爲C++)。 – kaylum
@kaylum'_splitpath_s'是舊C日'stdlib.h'中的一個函數。 – athos
@athos:無關緊要 - 您正在編寫C++。 '_splitpath_s'實際上是一個Windows API函數,不屬於C. –