Я скачал библиотеку Eigen (3) и начал ее использовать. Я написал функцию-шаблон и объявил внутри функции локальную переменную «типа шаблона». Я получаю следующую ошибку компиляции.
$ g++ EigenTest.cpp
EigenTest.cpp: In instantiation of ‘void myFunc(Eigen::MatrixBase<Derived>&) [with Type1 = Eigen::Matrix<double, -1, -1>]’:
EigenTest.cpp:24:10: required from here
EigenTest.cpp:16:26: error: conversion from ‘Eigen::DenseCoeffsBase<Eigen::Matrix<double, -1, -1>, 1>::Scalar {aka double}’ to non-scalar type ‘Eigen::Matrix<double, -1, -1>’ requested
Type1 tmp = matrix(0, 0);
«EigenTest.cpp» приведен ниже.
#include "Eigen/Dense"
#include <iostream>
template<typename Type1>
void myFunc(Eigen::MatrixBase<Type1>& matrix)
{
int i=matrix.rows();
Type1 tmp = matrix(0, 0); // getting compiler error here
std::cout<<"tmp is ->"<<tmp<<std::endl;
}
int main()
{
Eigen::MatrixXd m(2,2);
m.setConstant(100);
myFunc(m);
return 0;
}
Я также пробовал использовать 'typename Type1 tmp = matrix(0, 0);'
Это тоже не сработало!
Как это исправить? В обычном шаблонном программировании на C++ (без Eigen) я могу определить локальную переменную внутри функции шаблона как «Type1 tmp;»
Type1
? И программа, которую вы показываете в вопросе, не та, которая выдавала ошибки. Пожалуйста, покажите настоящую программу. - person Some programmer dude   schedule 31.10.2013matrix(0, 0)
(что я не совсем понимаю, но это рано) не соответствует типуType1
- что бы это ни было, вы не показали нам, как определяетсяType1
, предположительно где-то в каком-то typedef. - person Grimm The Opiner   schedule 31.10.2013<>
, теперь я получаю ошибку, как описано в ОП. - person rubenvb   schedule 31.10.2013