c++ - STL VS13 C++ : Error C4996 not disabling

标签 c++ stl

我在 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 files\microsoft visual studio 12.0\vc\include\xutility(372): error C2825: '_Iter': must be a class or namespace when followed by '::'
    c:\program files\microsoft visual studio 12.0\vc\include\xutility(372): error C2039: 'value_type' : is not a member of '`global namespace''
    c:\program files\microsoft visual studio 12.0\vc\include\xutility(372): error C2146: syntax error : missing ';' before identifier 'value_type'
    c:\program files\microsoft visual studio 12.0\vc\include\xutility(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 files\microsoft visual studio 12.0\vc\include\xutility(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

关于c++ - STL VS13 C++ : Error C4996 not disabling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29317161/

相关文章:

c++ - 如何将 opencv_contrib 添加到 CMake 项目?

c++ - string::iterator 一定是 random_access_iterator 吗?

c++ - 为什么 std::inserter 这么慢?

c++ - 检查函数返回类型是否与 STL 容器类型值相同

c++ - 调用 std::adjacent_difference() 时的隐式转换

c++ - 这种使用 std::string 的方式安全吗?

c++ - 连接非 IOCP 客户端与 IOCP 服务器

c++ - 在 Windows 上生成硬件 ID

c++ - 给定一个数组,找出具有 m 个奇数的子数组的数量?

c++ - 使用不同功能的队列中的打印元素不会在_start程序中全局清空队列。还有更多解释吗?