把一個C++工程,從vs2015工程向vs2019工程遷移的過程中,碰到了好多問題,記錄如下:
1. ConfigINI.cpp(85,55): error C2664: “std::string &trim(std::string &)”: 無法將參數 1
從“std::basic_string<char,std::char_traits<char>,std::allocator<char>>”轉換爲“std::string &”
ConfigINI.cpp(85,45): message : 非常量引用只能綁定到左值
ConfigINI.cpp(24,9): message : 參見“trim”的聲明
解決辦法是增加一個強制類型轉換:entry.name = trim((string&)str.substr(0,fIndex));
2. 還有一些過期的func要使用,編譯選項中增加:/D _CRT_SECURE_NO_WARNINGS。
3. error C3861: “access”: 找不到標識符。access函數在windows中是_access()
替換一下就好。
4. 下面這種打印的表達方式也不被允許了:
#if 1
#define VosPrint(fmt,args...) do{ \
char _PrtBuf[1000]; \
sprintf(_PrtBuf,":" fmt , ## args); \
Log_MsgLine("vos.log",_PrtBuf); \
}while(0)
#else
#define VosPrint(fmt,args...)
#endif
重新找一個logger模塊,新建過濾器,包括logger子模塊源代碼進來。
5. 此外sprintf要改爲snprintf。strcpy要改爲strcpy_s。
改動還是比較多,感覺就是ISO的c++ 14標準變得更嚴格了,這也是好事,避免可能的出錯。