我有一个简单的头文件(VectorSpace.h),其中包括Eigen库,向量类和成员函数:
#include <Eigen/Eigen>
#include <string>
class vector {
public:
Eigen::Matrix<double,1,Eigen::Dynamic> vec;
double dot(const vector &that){
return (this->vec).dot(that.vec);
}
};
我试图使用g ++预编译此头文件
g++ -std=c++11 -I../userlib/eigen VectorSpace.h
会生成一个VectorSpace.h.gch,但是当我尝试编译主代码时(基本上是一个空的main()):
g++ -std=c++11 -include VectorSpace.h code.o -o code
我收到以下错误:
../userlib/eigen/Eigen/src/Core/DenseCoeffsBase.h:56:30: warning: ignoring attributes on template argument ‘Eigen::internal::packet_traits<double>::type’ {aka ‘__vector(2) double’} [-Wignored-attributes]
../userlib/eigen/Eigen/src/Core/DenseCoeffsBase.h: In instantiation of ‘class Eigen::DenseCoeffsBase<Eigen::Product<Eigen::Block<Eigen::Matrix<double, -1, -1>, -1, -1, true>, Eigen::Block<Eigen::Block<Eigen::Matrix<double, -1, -1>, -1, 1, true>, -1, 1, false>, 0>, 0>’:
../userlib/eigen/Eigen/src/Core/DenseBase.h:41:34: required from ‘class Eigen::DenseBase<Eigen::Product<Eigen::Block<Eigen::Matrix<double, -1, -1>, -1, -1, true>, Eigen::Block<Eigen::Block<Eigen::Matrix<double, -1, -1>, -1, 1, true>, -1, 1, false>, 0> >’
我是在做错什么,还是因为无法预先编译本征? (我预编译标准库头没有任何问题,只是在我添加Eigen时收到错误)
答案 0 :(得分:1)
$ g++ -std=c++11 -I../userlib/eigen VectorSpace.h
$ g++ eigen.cpp -I ../userlib/eigen -include VectorSpace.h -H -o eigen
其中eigen.cpp是包含main()入口点的源文件。
int main()
{
vector v;
return 0;
}