gpt4 book ai didi

c++ - VS2013中转换运算符错误C2678,在VS2008中有效

转载 作者:太空宇宙 更新时间:2023-11-04 11:28:17 24 4
gpt4 key购买 nike

我有一段代码在VS2008中编译成功,在VS2013中编译失败。

有一个 Data::CData 类,它是一个变体类型实现。它有一个转换运算符重载:

template<class T> T&        GetValue();
template<class T> const T& GetValue() const;
template<class T> operator T&() { return GetValue<T>(); }
template<class T> operator const T&() const { return GetValue<T>(); }

产生错误的代码是

Data::CData Val;
Data::PParams Prm = (const Data::PParams&)Val;

错误是:error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const Data::PParams' (or there are no acceptable conversion).

这段代码被两个编译器成功编译:

Data::CData Val;
Data::PParams Prm = Val.operator const Data::PParams&();

我做错了什么?

重现问题的示例:https://www.dropbox.com/s/zjohnu5v87tyr2c/ConstOverload.zip?dl=0

最佳答案

我终于找到了解决办法!而不是我以前的两个运算符重载

template<class T> operator T&() { return GetValue<T>(); }
template<class T> operator const T&() const { return GetValue<T>(); }

应该有三个

template<class T> operator T&() { return GetValue<T>(); }
template<class T> operator const T&() { return GetValue<T>(); }
template<class T> operator const T&() const { return GetValue<T>(); }

因此,在 VS2013 中我们还需要一个专门的运算符来从非 const 对象中获取 const 引用。如果有人找到定义它的官方文档,请在此处发布链接。希望这个答案对其他人有帮助。

关于c++ - VS2013中转换运算符错误C2678,在VS2008中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25818818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com