MinGW 错误:“min”不是“std”的成员

Posted

技术标签:

【中文标题】MinGW 错误:“min”不是“std”的成员【英文标题】:MinGW error: 'min' is not a member of 'std' 【发布时间】:2011-09-28 01:08:37 【问题描述】:

我正在尝试仅使用标准库将一些 VC++ 6 代码转换为控制台应用程序,但我从 MinGW 收到以下错误(Code::Blocks 10.05 IDE 提供的任何版本):

error: 'min' is not a member of 'std'

这和下面这行代码有关:

L.Precision=std::min(1.e-4,0.001*res);

L.Precisiondoubleresdouble。以前这行是:

L.Precision=min(1.e-4,0.001*res);

但这给出了错误:

error: 'min' was not declared in this scope

以下是相关文件中的标题:

#include<stdio.h>
#include<math.h>
//#include<algorithm.h>
#include <malloc.h>
#include "complex.h"
#include "mesh.h"
#include "spars.h"
#include "FemmeDocCore.h"

我知道这可能与文件windef.h 中定义的一些宏有关,但如果我对此有误,请纠正我。

对此我能做些什么呢?我对 C++ 比较陌生,甚至不确定在哪里调用 windef.h,我认为这只是每个 Windows 程序都需要的,并且在某些时候由 MinGW 添加。我希望最终的代码是跨平台的。

【问题讨论】:

【参考方案1】:

您应该取消注释并修复 #include &lt;algorithm&gt;,(不带 .h),这是声明 std::min 的位置。

这与 MinGW 或 GCC 或 Windows 完全无关,这是标准的 C++ 东西。如果您遇到任何其他类似的错误,请在 http://en.cppreference.com/w/ 上搜索缺少的标识符。

另外:使用&lt;cmath&gt;&lt;cstdio&gt;,避免使用malloc和朋友,使用new/new[]delete/delete[]代替。

【讨论】:

谢谢,这解决了问题(即标题确实应该是#include doh!)。我使用 malloc 是因为代码已经有很多对“free”和“calloc”等的调用。这是一个大问题,还是我可以保持原样?这不是我的代码,是别人的。 @crobar:好吧,这并没有错,只是不合适。如果它没有损坏,请不要修复它。尤其是如果它不是您自己的代码。

以上是关于MinGW 错误:“min”不是“std”的成员的主要内容,如果未能解决你的问题,请参考以下文章

to_string 不是 std 的成员,g++ (mingw) 说

to_string 不是 std 的成员,g++ (mingw) 说

std::thread 错误(线程不是 std 的成员)

cygwin g++ std::stoi“错误:‘stoi’不是‘std’的成员

错误 C2039:“查找”:不是“标准”的成员

Visual Studio 2008,错误 c2039:“set_new_handler”:不是“std”的成员