我有點困惑。我正在創建一個自定義的「Variant」類,但遇到了std :: string成員的一個奇怪問題。在一個類中未初始化的std :: string?
當我嘗試從另一個Variant實例分配它時,我得到一個異常,該字符串是一個錯誤的指針。我不確定我是否明白爲什麼會發生這種情況,因爲字符串應該是構建類時的實例。
這裏是我的代碼:
Variant v1 = "Hello";
Variant v2 = v1; // <--- Here is where it occurs
現在,如果我創建一個手動=操作符重載,我可以看到,V2值是:
class Variant : ObjectBase {
public:
Variant() {};
Variant(const Value& node) { parse(node); };
ValueType Type = ValueType::Unknown;
Variant& operator= (bool value)
{ Type = ValueType::Boolean; value_.vBool = value; return *this; };
Variant& operator= (std::string value)
{ Type = ValueType::String; value_string_ = value; return *this; };
Variant& operator= (double value)
{ Type = ValueType::Double; value_.vDouble = value; return *this; };
Variant& operator= (int32_t value)
{ Type = ValueType::Int32; value_.vInt32 = value; return *this; };
Variant& operator= (int64_t value)
{ Type = ValueType::Int64; value_.vInt64 = value; return *this; };
Variant& operator= (uint32_t value)
{ Type = ValueType::Uint32; value_.vUint32 = value; return *this; };
Variant& operator= (uint64_t value)
{ Type = ValueType::Uint64; value_.vUint64 = value; return *this; };
Variant& operator= (const Value& node) { parse(node); };
private:
union Any {
int32_t vInt32;
int64_t vInt64;
double vDouble;
bool vBool;
uint32_t vUint32;
uint64_t vUint64;
Any() : vDouble(0) {};
} value_;
std::string value_string_;
};
我這樣做時,會出現異常壞指針,但我不知道爲什麼。這裏是我的過載:
Variant& operator= (const Variant value) {
value_ = value.value_;
value_string_ = value.value_string_;
Type = value.Type;
return *this;
}
也許我累了或什麼的,但它不是明顯對我什麼我在這裏失蹤。
'warning:控制到達非空函數的結尾[-Wreturn-type] Variant&operator =(const Value&node){parse(node); };' – 2015-02-24 01:11:34
'錯誤:沒有從'const char [6]'到'Variant'的可行轉換 Variant v1 =「Hello」;'http://coliru.stacked-crooked.com/a/7c16693de7a97ab9) – 2015-02-24 01:12:12
如果你爲'char *'定義了一個賦值操作符? – 2015-02-24 01:35:36