isspace宏与locale_facets.h中的isspace函数冲突

时间:2012-06-15 23:18:10

标签: c++ c linux cuda cmake

我正在构建一个包含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>,并且取消了宏。

非常感谢对此问题的任何帮助或见解。

1 个答案:

答案 0 :(得分:5)

不要混用和匹配C和C ++标题。

使用#include <locale>使用两个参数提取std::isspace模板。使用#include <cctype>表示ctype.h的C ++安全包含不会导致与STL冲突。

如果您正在编写C程序并且不想要或不需要C ++,则应该没有问题,包括ctype.h和只使用一个参数的isspace函数。

相关问题