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() 會報錯
}