我正在构建一个包含cuda代码的cmake项目。我无法编译一个包含几个h文件的cuda文件。这是我收到的编译器错误

In file included from /usr/include/c++/4.4/bits/basic_ios.h:39,
                 from /usr/include/c++/4.4/ios:45,
                 from /usr/include/c++/4.4/ostream:40,
                 from /usr/include/c++/4.4/iostream:40,
                 from /home/pfeifs/Developement/Deform/LinuxDeform/LibDeform/Deform/cutil_comfunc.h:20,
                 from /home/pfeifs/Developement/Deform/LinuxDeform/LibDeform/Deform/VectorMathDef.h:22,
                 from /home/pfeifs/Developement/Deform/LinuxDeform/LibDeform/src/Deform/VectorMath.cu:15:
/usr/include/c++/4.4/bits/locale_facets.h:2521:44: error: macro "isspace" passed 2 arguments, but takes just 1

isspace()定义为在<ctype.h>中需要一个参数的宏,并在locale_facets.h中声明为模板函数。(这两个文件都是标准文件。)但是在locale_facets.h开头,会包含<cctype>并取消声明宏。
对这个问题的任何帮助或见解都非常感激。

最佳答案

不要混合和匹配C和C++头。
使用#include <locale>拉入带有两个参数的std::isspace模板。使用#include <cctype>用于C++安全,包含ctype.h不会导致与STL冲突。
如果编写C程序,不需要或不需要C++,则不存在任何问题,包括ctype.h和只使用一个参数的isspace函数。

关于c++ - isspace宏与locale_facets.h中的isspace函数冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11059308/

10-11 16:06