定义_SCL_SECURE_NO_WARNINGS后 Xutility 中的错误

Errors in Xutility after defining _SCL_SECURE_NO_WARNINGS

本文关键字:Xutility 错误 WARNINGS SCL SECURE NO 定义      更新时间:2023-10-16

我正在尝试实现一个用于计算两个向量的点积的类。

float dotProduct(vec2 v1, vec2 v2)
{
    if (v1.Length() != v2.Length()) { return NULL; }
    return (float)std::inner_product(v1.x, v1.y, v2.x, 0.0);
}

当我遵守这一点时,我得到:

Error   1   error C4996: 'std::_Inner_product2': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'  C:Program Files (x86)Microsoft Visual Studio 12.0VCincludenumeric  121

所以我补充#define _SCL_SECURE_NO_WARNINGS

但是后来我在 xutility 中遇到了一堆错误

Error   1   error C2825: '_Iter': must be a class or namespace when followed by '::'    C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 371
Error   2   error C2039: 'iterator_category' : is not a member of '`global namespace''  C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 371
Error   3   error C2146: syntax error : missing ';' before identifier 'iterator_category'   C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 371
Error   4   error C2602: 'std::iterator_traits<_InIt>::iterator_category' is not a member of a base class of 'std::iterator_traits<_InIt>'  C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 371
Error   5   error C2868: 'std::iterator_traits<_InIt>::iterator_category' : illegal syntax for using-declaration; expected qualified-name   C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 371
Error   6   error C2825: '_Iter': must be a class or namespace when followed by '::'    C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 372
Error   7   error C2039: 'value_type' : is not a member of '`global namespace'' C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 372
Error   8   error C2146: syntax error : missing ';' before identifier 'value_type'  C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 372
Error   9   error C2602: 'std::iterator_traits<_InIt>::value_type' is not a member of a base class of 'std::iterator_traits<_InIt>' C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 372
Error   10  error C2868: 'std::iterator_traits<_InIt>::value_type' : illegal syntax for using-declaration; expected qualified-name  C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 372
Error   11  error C2825: '_Iter': must be a class or namespace when followed by '::'    C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 373
Error   12  error C2039: 'difference_type' : is not a member of '`global namespace''    C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 373
Error   13  error C2146: syntax error : missing ';' before identifier 'difference_type' C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 373
Error   14  error C2602: 'std::iterator_traits<_InIt>::difference_type' is not a member of a base class of 'std::iterator_traits<_InIt>'    C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 373
Error   15  error C2868: 'std::iterator_traits<_InIt>::difference_type' : illegal syntax for using-declaration; expected qualified-name C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 373
Error   16  error C2825: '_Iter': must be a class or namespace when followed by '::'    C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 375
Error   17  error C2039: 'pointer' : is not a member of '`global namespace''    C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 375
Error   18  error C2146: syntax error : missing ';' before identifier 'pointer' C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 375
Error   19  error C2602: 'std::iterator_traits<_InIt>::pointer' is not a member of a base class of 'std::iterator_traits<_InIt>'    C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 375
Error   20  error C2868: 'std::iterator_traits<_InIt>::pointer' : illegal syntax for using-declaration; expected qualified-name C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 375
Error   21  error C2825: '_Iter': must be a class or namespace when followed by '::'    C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 376
Error   22  error C2039: 'reference' : is not a member of '`global namespace''  C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 376
Error   23  error C2146: syntax error : missing ';' before identifier 'reference'   C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 376
Error   24  error C2602: 'std::iterator_traits<_InIt>::reference' is not a member of a base class of 'std::iterator_traits<_InIt>'  C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 376
Error   25  error C2868: 'std::iterator_traits<_InIt>::reference' : illegal syntax for using-declaration; expected qualified-name   C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 376
Error   26  error C2665: 'std::_Debug_range2' : none of the 2 overloads could convert all the argument types    C:Program Files (x86)Microsoft Visual Studio 12.0VCincludexutility 584

查看文档

http://en.cppreference.com/w/cpp/algorithm/inner_product

您传递的是值而不是迭代器。 此功能可以为更长的向量创建乘积,因此它需要数据的开始和结束,请尝试此操作;

std::inner_product(v1.begin(), v1.end(), v2.begin(), 0.0);