STL VS13 C++:错误C4996未禁用

STL VS13 C++: Error C4996 not disabling

本文关键字:C4996 错误 VS13 C++ STL      更新时间:2023-10-16

我在VS13:中有这个代码

double distance(vector <double> point) {
    return sqrt(inner_product(point[0], point[4], point, 0));
}
int main() {
    vector < double > point {2, 2, 2, 2};
    cout << distance(point);
    cin.get();
}

它调用

    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)
 c:program filesmicrosoft visual studio 12.0vcincludexutility(372): error C2825: '_Iter': must be a class or namespace when followed by '::'
    c:program filesmicrosoft visual studio 12.0vcincludexutility(372): error C2039: 'value_type' : is not a member of '`global namespace''
    c:program filesmicrosoft visual studio 12.0vcincludexutility(372): error C2146: syntax error : missing ';' before identifier 'value_type'
    c:program filesmicrosoft visual studio 12.0vcincludexutility(372): error C2602: 'std::iterator_traits<_InIt>::value_type' is not a member of a base class of 'std::iterator_traits<_InIt>'

我知道这里有很多类似的问题。我还阅读了MSDN上的文档。

因此,我尝试了下一个解决方案:

1) #define _SCL_SECURE_NO_WARNINGS

从过去的评论来看,它似乎有效,但对我来说,它导致了一大堆错误,比如:

c:program filesmicrosoft visual studio 12.0vcincludexutility(371): error C2825: '_Iter': must be a class or namespace when followed by '::'

2)

#pragma warning(disable:4996)
#pragma warning(default:4996)

造成了同样的错误;

3) 项目属性->配置属性->C/C++->常规->SDL检查->编号

就是不起作用。

你能看一看并写下我如何禁用那个错误吗?谢谢

我想你指的是以下函数

double distance( const std::vector<double> &point ) 
{
    return std::sqrt( std::inner_product( point.begin(), point.end(), point.begin(), 0.0 ) );
}

这是一个演示程序

#include <iostream>
#include <vector>
#include <numeric>
#include <cmath>
double distance( const std::vector<double> &point ) 
{
    return std::sqrt( std::inner_product( point.begin(), point.end(), point.begin(), 0.0 ) );
}
int main()
{ 
    std::vector<double> point = { 2, 2, 2, 2 };
    std::cout << distance( point ) << std::endl;
}

输出为

4

工具选项高级

这里有一个部分用于抑制警告
如果我没有记错4820;4996;4710是我一直压制的三个。