Ошибка компиляции: … не было объявлено в этой области

Я новичок в программировании на C ++. Я должен реализовать программу, которая вычисляет псевдообратную матрицу. Как подсказывает учебник по Eigen, я написал такой код:

    #include <stdio.h>
#include <stdlib.h>
#include <Core>
#include <iostream>
#include <Eigen/Dense>
#include <Eigen/SVD>
#include <Eigen/Eigen>
using namespace Eigen;
using namespace std;void pinv(MatrixXf& pinvmat)
{
ei_assert(m_isInitialized && "SVD is not initialized.");
double  pinvtoler=1.e-6;                       // choose tolerance
SingularValuesType m_sigma_inv=m_sigma;
for ( long i=0; i<m_workMatrix.cols(); ++i) {
if ( m_sigma(i) > pinvtoler )
m_sigma_inv(i)=1.0/m_sigma(i);
else m_sigma_inv(i)=0;
}
pinvmat = (m_matV*m_sigma_inv.asDiagonal()*m_matU.transpose());}

int main()
{

MatrixXf A(3,2);
A<<1,2,3,4,5,6;
pinv(A);
cout << "pinv =" << endl << A << endl;
return 0;
}

Если я попытаюсь скомпилировать его, я получу ошибки:

tut_eigen / pinv.cpp: в функции void pinv (Eigen :: MatrixXf) ':
tut_eigen / pinv.cpp: 18: 14: ошибка: «m_isInitialized» не было объявлено в этой области
tut_eigen / pinv.cpp: 18: 58: ошибка: «ei_assert» не был объявлен в этой области
tut_eigen / pinv.cpp: 20: 4: ошибка: «SingularValuesType» не был объявлен в этой области
tut_eigen / pinv.cpp: 20: 23: ошибка: ожидается ";" перед "m_sigma_inv"
tut_eigen / pinv.cpp: 21: 22: ошибка: «m_workMatrix» не был объявлен в этой области
tut_eigen / pinv.cpp: 22: 19: ошибка: «m_sigma» не было объявлено в этой области
tut_eigen / pinv.cpp: 23: 19: ошибка: «m_sigma_inv» не было объявлено в этой области
tut_eigen / pinv.cpp: 24: 22: ошибка: «m_sigma_inv» не было объявлено в этой области
tut_eigen / pinv.cpp: 26: 15: ошибка: «m_matV» не было объявлено в этой области
tut_eigen / pinv.cpp: 26: 22: ошибка: «m_sigma_inv» не было объявлено в этой области
tut_eigen / pinv.cpp: 26: 47: ошибка: «m_matU» не было объявлено в этой области

Зачем?? Они не объявлены в файле SVD?

2

Решение

Я подозреваю, что вы говорите об этом «руководство» это не столько учебник, сколько FAQ, если вы уже немного знаете о библиотеке (было бы полезно, если вы дадите ссылку на свои источники информации, кстати).

Это говорит о том, что вы можете добавить pinv() метод к SVD «снаружи». Я предполагаю, что они имеют в виду, что вы можете получить из SVD и предоставить pinv() метод в вашем производном классе. Простой ввод функции где-то не дает компилятору необходимого контекста, чтобы определить, где находятся ссылочные имена.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector