我正在构建一个包含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>
,并且取消了宏。
非常感谢对此问题的任何帮助或见解。
答案 0 :(得分:5)
不要混用和匹配C和C ++标题。
使用#include <locale>
使用两个参数提取std::isspace
模板。使用#include <cctype>
表示ctype.h
的C ++安全包含不会导致与STL冲突。
如果您正在编写C程序并且不想要或不需要C ++,则应该没有问题,包括ctype.h
和只使用一个参数的isspace
函数。