预编译标头特征



我有一个简单的头文件(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?(我在预编译标准库头文件时没有任何问题,只是当我添加Eigen时,我才得到错误(

$ g++ -std=c++11 -I../userlib/eigen VectorSpace.h
$ g++ eigen.cpp -I ../userlib/eigen -include VectorSpace.h -H -o eigen

其中,character.cpp是包含main((入口点的源文件。

int main()
{
vector v;
return 0;
}

最新更新