Eigen備忘錄

ChrisZZ發表於2024-05-21

1. 標頭檔案不當會導致編譯報錯

VSCode 的 clangd (或別的外掛?)會自作聰明的引入標頭檔案,但也許引入的並符合你的預期:

#include <Eigen/src/Geometry/Transform.h> // 這檔案有問題
#include <Eigen/Dense>
#include <Eigen/src/Geometry/Quaternion.h> // 這檔案不需要
#include <iostream>

class Vector3
{
public:
    float x;
    float y;
    float z;

    Vector3(float x=0, float y=0, float z=0):
        x(x), y(y), z(z){}

    Vector3(Eigen::Vector3f v):
        x(v.x()), y(v.y()), z(v.z()) {} // 此處 v.x(), v.y(), v.z() 會報錯

}

改為如下則透過:

#include <Eigen/Dense>
#include <iostream>

class Vector3
{
public:
    float x;
    float y;
    float z;

    Vector3(float x=0, float y=0, float z=0):
        x(x), y(y), z(z){}

    Vector3(Eigen::Vector3f v):
        x(v.x()), y(v.y()), z(v.z()) {} // 此處 v.x(), v.y(), v.z() 會報錯

}

相關文章