头文件中的错误C2719 - 不使用stl:vector

时间:2011-06-01 22:00:56

标签: c++ stl eigen

编译代码时遇到一些问题。由于错误C2719,有几个函数无法编译 - 带有__declspec(align('16')的形式参数)将不会对齐。

VisualStudio无法编译的功能看起来像

Eigen::Matrix2d AlgorithmBase::ReverseTransform(Eigen::Vector2d point, Eigen::Vector2d *translation, Eigen::Matrix2d *scaling, double phi, Eigen::Matrix2d *share)
{
    Eigen::Matrix2d reversedScaling;
    reversedScaling(0,0) = 1/(*scaling)(0,0);
    reversedScaling(0,1) = reversedScaling(1,0) = 0;
    reversedScaling(1,1) = 1/(*scaling)(1,1);
    Eigen::MatrixXd  newTranslation = -1**translation;

    return  MatrixHelper::CreateRotationMatrix(-phi)* *scaling*point + newTranslation;
}

void TemplateClusterBase::SetScalingMatrix( Eigen::Matrix2d matrix )
{
    if(matrix.rows() == 1 || matrix.cols()==1) 
    {
        this->scalingMatrix = MatrixHelper::CreateScalingMatrix(matrix(0,0));
    }
    else
    {
        this->scalingMatrix = matrix;
    }
}

这很奇怪,因为之前我使用的是MatrixXd而不是Vector2d和Matrix2d,一切都很好。更有甚者,这是使用stl:vector时常见的问题 - 但是你可以看到这个函数不作为参数stl:vector。

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:3)

编译器错误C2719与STL无关,它告诉您不允许在正式参数声明中使用'align'__ declspec修饰符。

要解决您的问题,您需要在不使用__declspec(align(...))的情况下声明您的函数。当然你没有明确地使用__declspec,所以你需要弄清楚它是如何/为什么代表你使用它。

一个好的起点可能是Eigen :: Matrix2d的定义。