我在Visual Studio 2005和2008下使用了一段簡單的char緩衝區。 我今天轉換爲VS 2013,並且在不同的場景中出現模糊的轉換錯誤。我刪除了不需要的部分代碼:轉換爲Visual Studio 2013的鑄造操作員的問題
#include <string>
class ACP
{
public:
ACP(const char* const init) : ourStr_(_strdup(init)), size_(strlen(init) + 1) { }
virtual ~ACP() { free(ourStr_); }
//
// casting operators
//
operator char*() { return ourStr_; }
operator const char* const() const { return ourStr_; }
operator const std::string() const { return ourStr_; }
protected:
// hide the default constructor
ACP() : ourStr_(NULL), size_(0) {}
// hide the copy constructor
ACP(const ACP& copy);
protected:
char* ourStr_;
size_t size_;
}; // ACP
void t(const std::string& val)
{
std::string s = val;
}
void test()
{
const ACP acp("hello");
std::string s = acp;
const std::string cs = acp;
t((std::string)acp);
t(acp);
char ch[50];
strcpy(ch, acp);
}
新的衝突似乎在char *和std :: string之間的轉換運算符。 給予錯誤,像這樣:
1>foo.cpp(36): error C2440: 'initializing' : cannot convert from 'const ACP' to 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>'
1> No constructor could take the source type, or constructor overload resolution was ambiguous
1>foo.cpp(37): error C2440: 'initializing' : cannot convert from 'const ACP' to 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>'
1> No constructor could take the source type, or constructor overload resolution was ambiguous
1>foo.cpp(38): error C2440: 'type cast' : cannot convert from 'const ACP' to 'std::string'
1> No constructor could take the source type, or constructor overload resolution was ambiguous
嗨。謝謝。 所以稍微澄清一下。我知道我可以通過幾種方式「修復」所有這些都打敗了課堂的原創目的。 請注意,我也試過VS2015,它與2013年有點不同。 所以,我真正的問題是爲什麼我的代碼不再適用於較新的環境。即我只想了解原因。 我已經好好地添加了.str()函數,並且必須通過數百個文件才能使用它:-( –