定义_SCL_SECURE_NO_WARNINGS后的多功能性错误

时间:2014-12-19 12:39:52

标签: c++

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

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.0\VC\include\numeric  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.0\VC\include\xutility 371
Error   2   error C2039: 'iterator_category' : is not a member of '`global namespace''  C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xutility 371
Error   3   error C2146: syntax error : missing ';' before identifier 'iterator_category'   C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xutility 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.0\VC\include\xutility 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.0\VC\include\xutility 371
Error   6   error C2825: '_Iter': must be a class or namespace when followed by '::'    C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xutility 372
Error   7   error C2039: 'value_type' : is not a member of '`global namespace'' C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xutility 372
Error   8   error C2146: syntax error : missing ';' before identifier 'value_type'  C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xutility 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.0\VC\include\xutility 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.0\VC\include\xutility 372
Error   11  error C2825: '_Iter': must be a class or namespace when followed by '::'    C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xutility 373
Error   12  error C2039: 'difference_type' : is not a member of '`global namespace''    C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xutility 373
Error   13  error C2146: syntax error : missing ';' before identifier 'difference_type' C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xutility 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.0\VC\include\xutility 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.0\VC\include\xutility 373
Error   16  error C2825: '_Iter': must be a class or namespace when followed by '::'    C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xutility 375
Error   17  error C2039: 'pointer' : is not a member of '`global namespace''    C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xutility 375
Error   18  error C2146: syntax error : missing ';' before identifier 'pointer' C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xutility 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.0\VC\include\xutility 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.0\VC\include\xutility 375
Error   21  error C2825: '_Iter': must be a class or namespace when followed by '::'    C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xutility 376
Error   22  error C2039: 'reference' : is not a member of '`global namespace''  C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xutility 376
Error   23  error C2146: syntax error : missing ';' before identifier 'reference'   C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xutility 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.0\VC\include\xutility 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.0\VC\include\xutility 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.0\VC\include\xutility 584

1 个答案:

答案 0 :(得分:0)

查看文档

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

您传递的值不是迭代器。这个功能可以为更长的向量创建产品,因此它需要数据的开始和结束,试试这个;

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