C++ MinGW-w64编译失败,为nullptr\t

C++ MinGW-w64编译失败,为nullptr\t,c++,mingw-w64,C++,Mingw W64,我正在尝试用mingw-w64编译cpputest,但失败了,因为它找不到nullptr\t。失败的函数是cpputest\src\cpputest\SimpleString.cpp:StringFrom SimpleString StringFrom(const nullptr_t value) { (void) value; return "(null)"; } 我试图用 C:\mingw-w64\i686-8.1.0-posix-dwarf-rt\u v6-rev0\mi

我正在尝试用mingw-w64编译cpputest,但失败了,因为它找不到nullptr\t。失败的函数是cpputest\src\cpputest\SimpleString.cpp:StringFrom

SimpleString StringFrom(const nullptr_t value)
{
    (void) value;
    return "(null)";
}
我试图用

C:\mingw-w64\i686-8.1.0-posix-dwarf-rt\u v6-rev0\mingw32\bin\g++.exe-DCPPUTEST\u HAVE\u STRDUP=1-DHAVE\u CONFIG\u H-D\u TIMESPEC\u DEFINED=1@cmakfiles/CppUTest.dir/includes\u CXX.rsp-包括“C:/git/tdd/CppUTest/include/MemoryLeakDetectorNewMacros.H”-包括“C:/git/tdd/CppUTest/CppUTest/emorchmakes”-std=c++11-Wall-Wextra-pedantic-Wshadow-Wswitch default-Wswitch enum-Wconversion-Wsign conversion-Wno padded-Wno long-Woverloaded virtual-Wno旧式cast-Wno-c++14 compat-O2-g-DNDEBUG-o cmakfiles\CppUTest.dir\SimpleString.cpp.obj-c:\git\tdd\CppUTest\src\CppUTest\CppUTest\CppUTest\SimpleString.cpp

它失败了

C:\git\tdd\cpputest\src\CppUTest\SimpleString.cpp:565:31: error: 'nullptr_t' does not name a type
 SimpleString StringFrom(const nullptr_t value)
                               ^~~~~~~~~
C:\git\tdd\cpputest\src\CppUTest\SimpleString.cpp:565:31: note: 'nullptr_t' is defined in header '<cstddef>'; did you forget to '#include <cstddef>'?
C:\git\tdd\cpputest\src\CppUTest\SimpleString.cpp:32:1:
+#include <cstddef>

C:\git\tdd\cpputest\src\CppUTest\SimpleString.cpp:565:31:
 SimpleString StringFrom(const nullptr_t value)
                               ^~~~~~~~~
C:\git\tdd\cpputest\src\CppUTest\SimpleString.cpp:565:14: error: redefinition of 'SimpleString StringFrom(int)'
 SimpleString StringFrom(const nullptr_t value)
              ^~~~~~~~~~
C:\git\tdd\cpputest\src\CppUTest\SimpleString.cpp:479:14: note: 'SimpleString StringFrom(int)' previously defined here
 SimpleString StringFrom(int value)
              ^~~~~~~~~~
C:\git\tdd\cpputest\src\CppUTest\SimpleString.cpp: In function 'SimpleString StringFrom(cpputest_longlong)':
C:\git\tdd\cpputest\src\CppUTest\SimpleString.cpp:576:29: warning: unknown conversion type character 'l' in format [-Wformat=]
     return StringFromFormat("%lld", value);
                             ^~~~~~
C:\git\tdd\cpputest\src\CppUTest\SimpleString.cpp:576:29: warning: too many arguments for format [-Wformat-extra-args]
C:\git\tdd\cpputest\src\CppUTest\SimpleString.cpp: In function 'SimpleString StringFrom(cpputest_ulonglong)':
C:\git\tdd\cpputest\src\CppUTest\SimpleString.cpp:581:29: warning: unknown conversion type character 'l' in format [-Wformat=]
     return StringFromFormat("%llu", value);
                             ^~~~~~
C:\git\tdd\cpputest\src\CppUTest\SimpleString.cpp:581:29: warning: too many arguments for format [-Wformat-extra-args]
C:\git\tdd\cpputest\src\CppUTest\SimpleString.cpp: In function 'SimpleString HexStringFrom(cpputest_longlong)':
C:\git\tdd\cpputest\src\CppUTest\SimpleString.cpp:586:29: warning: unknown conversion type character 'l' in format [-Wformat=]
     return StringFromFormat("%llx", value);
                             ^~~~~~
C:\git\tdd\cpputest\src\CppUTest\SimpleString.cpp:586:29: warning: too many arguments for format [-Wformat-extra-args]
C:\git\tdd\cpputest\src\CppUTest\SimpleString.cpp: In function 'SimpleString HexStringFrom(cpputest_ulonglong)':
C:\git\tdd\cpputest\src\CppUTest\SimpleString.cpp:591:29: warning: unknown conversion type character 'l' in format [-Wformat=]
     return StringFromFormat("%llx", value);
                             ^~~~~~
C:\git\tdd\cpputest\src\CppUTest\SimpleString.cpp:591:29: warning: too many arguments for format [-Wformat-extra-args]
这个错误没有任何意义,因为我包含了cstddef

这一问题与环境有关


感谢您的帮助

修复非常简单:

SimpleString StringFrom(const std::nullptr_t value)
{
    (void) value;
    return "(null)";
}

感谢NathanOliver-让Monica恢复原职,帮你解决这个问题。

解决办法很简单:

SimpleString StringFrom(const std::nullptr_t value)
{
    (void) value;
    return "(null)";
}

感谢NathanOliver-让Monica帮你解决这个问题。

你确定文件中包含
?如果你对
#include void foo(nullptr_t){}int main(){foo(nullptr);}
进行编译,编辑问题。是的,我肯定。除非我产生幻觉,而且那
#include
没有我认为的效果。这个最小的例子编译了吗?或者你也因此得到了一个错误?啊,是的
nullptr\u t
不保证在
std::
之外。您可以使用std::nullptr\u t将
添加到文件的顶部以修复该问题。或者您可以像使用其他任何std类型一样使用
std::nullptr\u t
。您确定该文件包含
?如果你对
#include void foo(nullptr_t){}int main(){foo(nullptr);}
进行编译,编辑问题。是的,我肯定。除非我产生幻觉,而且那
#include
没有我认为的效果。这个最小的例子编译了吗?或者你也因此得到了一个错误?啊,是的
nullptr\u t
不保证在
std::
之外。您可以使用std::nullptr\u t
添加到文件的顶部以修复该问题。或者您也可以像使用其他任何std类型一样使用
std::nullptr\u t
。。。
SimpleString StringFrom(const std::nullptr_t value)
{
    (void) value;
    return "(null)";
}