当我尝试编译程序时,我遇到了一堆错误,例如:'std::max':找不到匹配的重载函数
When i try to compile a program i got a bunch of errors like :'std::max': no matching overloaded function found
当我尝试编译程序时,我遇到了一堆错误,例如:
'std::max': no matching overloaded function found
'const _Ty &std::max(const _Ty &,const _Ty &,_Pr) noexcept(<expr>)': expects 3 arguments - 2 provided
C2782: 'const _Ty &std::max(const _Ty &,const _Ty &) noexcept(<expr>)': template parameter '_Ty' is ambiguous
C2784: 'const _Ty &std::max(const _Ty &,const _Ty &) noexcept(<expr>)': could not deduce template argument for 'const _Ty &' from 'int'
以下是导致大多数问题的代码:
template <typename TVar>
void CopyVar( void*& pTarget, const void*& pSource, int nAlign = 4 )
{
*((TVar*) pTarget) = *((TVar*) pSource);
((BYTE*&) pTarget) += max( sizeof(TVar), nAlign );
((BYTE*&) pSource) += max( sizeof(TVar), nAlign );
}
有人可以帮我解决这个问题吗?
sizeof
运算符返回一个类型为 size_t
的值,这是一个无符号整数类型。
对 std::max
的调用混合了两种不同的类型(无符号size_t
和有符号int
),std::max
要求两个参数的类型相同。
如评论中所述,合适的解决方案是使nAlign
变量具有相同的类型,即size_t
。对齐永远不会是负的,也是一种大小。它还确保类型大小相同(size_t
可以是 64 位类型,而unsigned int
通常是 32 位)。
如果无法更改nAlign
类型,则应将sizeof
的结果强制转换为int
(这更安全,因为有人可能会为nAlign
传递负值,如果转换为无符号类型,这将产生不良后果)。
相关文章:
- 关于 std::min, std::max 中的比较运算符的混淆
- std::max() 函数与定点实现的比较中的问题
- 使用 CImg 库的 std::min 和 std::max 的编译问题
- 在枚举类型上使用std::max是不是一种糟糕的做法
- 如何在 C++11 中将 std::max 与自定义比较器一起使用?
- C++是否在 std::min 和 std::max 下标准化 std::optional 的行为?
- 编译器无法推断 std::max 的重载
- 为什么 c++ 编译器在对两种不同类型的数值变量使用"std::max()"函数时会出现错误
- 执行 std::min(0.0, 1.0) 和 std::max(0.0, 1.0) 会产生未定义的行为
- 自动变量可存储函数指针到std :: max
- std :: max带有动态数组
- std :: max,但用于模板参数
- 如果std::max()通过引用返回(这是必须的),这是否会导致悬空引用
- std::max with lambda and auto
- 在c++11中,如何在向量上调用std::max
- 有没有办法防止开发人员使用std::min, std::max
- 关于std::min()和std::max()的c++可变模板版本的思考
- std::max-需要一个标识符
- 将std::max转换为Java
- 如何在不重载比较操作符的情况下为std::max专门化自定义类型