1

在使用 intel oneAPI DPC++/C++ 编译器时,刚被困在用 Eigen C++ 编译一个简单的 C++ 程序:该示例包含两个 .cpp 文件(main.cpp 和 Preprocessing.cpp)和一个包含文件(struct_INFO.h)。

我不知道为什么编译器会出现如图所示的错误。 来自英特尔编译器的错误消息

duplicate symbol: bool const std::_Is_integral<bool>
duplicate symbol: bool const std::_Is_integral<char>
duplicate symbol: bool const std::_Is_integral<signed char> 
duplicate symbol: bool const std::_Is_integral<unsigned char>
duplicate symbol: bool const std::_Is_integral<wchar_t>
duplicate symbol: bool const std::_Is_integral<char16_t>
duplicate symbol: bool const std::_Is_integral<char32_t>

...所有的错误都是相似的,所以我只展示其中的一些。

在我的子例程 Preprocessing.cpp 中,似乎我既不能包含 Eigen 头文件 (<Eigen/Core>),也不能包含包含 Eigen 头文件的头文件 struct_INFO.h。

我知道解决问题的唯一方法是将两个 .cpp 文件合并为一个。

但是,这种方法有点麻烦,只要我需要使用 Eigen 变量,我就需要将所有子例程放在一个文件中。

有谁知道如何解决这个问题?谢谢你。

  1. 主.cpp:

    #include "struct_INFO.h"
    #include <Eigen/Core>
    
    int Preprocessing(struct_INFO& struct_INFO_obj);
    
    int main(int* argc, char** argv)
    {
        struct_INFO struct_INFO_obj;
        Preprocessing(struct_INFO_obj);
        return 0;
    }
    
  2. 预处理.cpp

    #include "struct_INFO.h"
    
    int Preprocessing(struct_INFO& struct_INFO_obj)
    {
           return 1;
    }
    
  3. struct_INFO.h

    #include <Eigen/Core>
    
    class struct_INFO
    {
           public:
           Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic> Matrix;
    };
    
4

0 回答 0