“initializing”:无法从“type1”转换为“type2”
“conversion”:无法从“type1”转换为“type2”
编译器无法从 隐式转换为 ,也不能使用指定的强制转换或转换运算符。
当编译器无法从一种类型转换为另一种类型时,编译器会生成 C2440,无论是隐式转换还是使用指定的强制转换或转换运算符。 有多种情况会生成此错误。 我们已在“示例”部分列出了一些常见项。
如果在设置编译器一致性选项 时尝试通过在 C++ 代码中使用字符串文本来初始化非 const(或 ),则可能会导致 C2440。 在 C 中,字符串文本的类型是 数组,但在 C++ 中,是 数组。 此示例生成 C2440:
在 C++20 或 下,UTF-8 文本字符或字符串(例如 或 )分别属于 或 类型。 此示例演示如何在 C++17 和 C++20 之间更改编译器行为:
如果尝试将指向成员的指针转换为 ,可能会看到 C2440。 下一个示例生成 C2440:
如果尝试从仅前向声明但未定义的类型进行强制转换,编译器会发出 C2440。 此示例生成 C2440:
下一个示例的第 15 行和第 16 行上的 C2440 错误由 消息限定。 UDT 是用户定义的类型,例如类、struct 或联合。 当前向声明的返回类型中指定的 UDT 的调用约定与 UDT 的实际调用约定冲突以及涉及函数指针时,会导致此类不兼容错误。
在此示例中,首先有一个 struct 和一个返回 struct 的函数的前向声明。 编译器假定 struct 使用 C++ 调用约定。 接下来是 struct 定义,该定义默认使用 C 调用约定。 由于编译器在完成读取整个 struct 之后才知道 struct 的调用约定,所以 的返回类型中 struct 的调用约定也被假定为 C++。
struct 后跟另一个返回 struct 的函数声明。 此时,编译器知道 struct 的调用约定是 C++ 。 同样,返回 struct 的函数指针在 struct 定义之后定义。 编译器现在了解 struct 使用 C++ 调用约定。
若要解决由不兼容调用约定引起的 C2440 错误,请声明在 UDT 定义后返回 UDT 的函数。
如果将零分配给内部指针,也会引发 C2440:
错误使用用户定义的转换也可能引发 C2440。 例如,当转换运算符被定义为 时,编译器无法在隐式转换中使用它。 有关用户定义转换的详细信息,请参阅用户定义转换 (C++/CLI)。 此示例生成 C2440:
如果尝试在 C++/CLI 中创建类型为 的数组实例,也会引发 C2440。 有关详细信息,请参阅 array。 下一个示例生成 C2440:
C2440 也可能因为属性功能的变化而发生。 以下示例生成 C2440。
在 下编译源代码时,Microsoft C++ 编译器不再允许 运算符向下强制转换。
若要解析此 C2440,请使用正确的强制转换运算符。 有关详细信息,请参阅强制转换运算符。
此示例生成 C2440:
由于 Visual Studio 2015 Update 3 中编译器的一致性更改,可能会引发 C2440。 以前,编译器在标识 操作的模板匹配时会错误地将某些不同的表达式视为相同类型。 现在编译器可以正确区分类型,并且依赖于先前 行为的代码被破坏。 若要解决此问题,请更改模板参数以匹配模板参数类型,或者使用 或 C 样式的强制转换。
此示例生成 C2440:
此错误可能显示在 ATL 代码中,该代码使用 中定义的 宏。
Visual Studio 2017 正确引发了与使用初始值设定项列表创建对象相关的编译器错误。 这些错误在 Visual Studio 2015 中没有被发现,它们可能会导致崩溃或未定义的运行时行为。 在 C++17 复制列表初始化中,编译器需要考虑用于重载解析的显式构造函数,但如果实际选择该重载,则必须引发错误。
以下示例在 Visual Studio 2015 中进行编译,但不在 Visual Studio 2017 中进行编译。
为更正此错误,应使用直接初始化:
在 Visual Studio 2015 中,编译器有时会在通过构造函数调用生成类对象时错误地忽略 cv 限定符。 此缺陷可能会导致崩溃或意外的运行时行为。 以下示例在 Visual Studio 2015 中编译,但在 Visual Studio 2017 及更高版本中会引发编译器错误:
若要更正此错误,请将运算符 int() 声明为 const。
到此这篇zipentry.getsize不可信解决(zip entry size is too large)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/12948.html