C++ openmpi不';t compile:错误:声明未声明任何内容

C++ openmpi不';t compile:错误:声明未声明任何内容,c++,mpi,openmpi,C++,Mpi,Openmpi,我想用MPI。我安装了它 sudo apt get安装libopenmpi dev 我在代码中包含了标题,当我尝试编译时,我有: In file included from /usr/lib/x86_64-linux-gnu/openmpi/include/openmpi/ompi/mpi/cxx/mpicxx.h:191, from /usr/lib/x86_64-linux-gnu/openmpi/include/mpi.h:2868,

我想用MPI。我安装了它
sudo apt get安装libopenmpi dev

我在代码中包含了标题,当我尝试编译时,我有:

In file included from /usr/lib/x86_64-linux-gnu/openmpi/include/openmpi/ompi/mpi/cxx/mpicxx.h:191,
                 from /usr/lib/x86_64-linux-gnu/openmpi/include/mpi.h:2868,
                 from main.cpp:6:
/usr/lib/x86_64-linux-gnu/openmpi/include/openmpi/ompi/mpi/cxx/constants.h:169:28: error: declaration does not declare anything [-fpermissive]
  169 | OMPI_DECLSPEC extern const Datatype COMPLEX;
我真的不知道如何修复它,因为我不想修改openmpi/include中的文件

编辑: @Gilles Gouailladet让我注意到我可能做了类似于
#define COMPLEX
的事情,事实上是这样的,因为我有一个复杂的类。 更改宏使我的代码得以编译。
现在的问题是,我们如何知道可以使用哪个宏?当我们使用一些库时,我们是否只需要避免一些“明显的”名称变得复杂,或者是否有办法知道我们可以使用或不使用哪一个?

请编辑您的问题并发布一篇文章(以确认您没有做类似于
#define COMPLEX
)这正是我所做的。我做了一个
定义复杂的
。它在没有条件的情况下起作用。关于做什么和不做什么,没有绝对的规则。不过,为所有宏添加前缀可能是一个很好的做法。但在这种情况下,正确的做法是使代码现代化,并停止使用MPI C++绑定,这些MPI绑定是在十多年前从MPI标准中删除的。普通的
C
绑定通常已经足够好了,如果您想要更多的C++-ish,可以查看
boost.MPI
(或其他库)。