II想在我目前正在研究的几何项目中使用Eigen进行线性代数。这是一个相对较小且易于使用且非常受欢迎的优秀图书馆。
但是,我还想使用自定义的“Double”类来比较计算机精度中的两个浮点值(类似于两者之间的差异必须小于给定的精度)。对于我的自定义类型,我实现了大多数std :: math c ++ 11函数和所有运算符(包括一元 - ,conj,imag,abs2 ......)。我做了这些链接中列出的所有内容:
http://eigen.tuxfamily.org/dox-devel/TopicCustomizingEigen.html
https://forum.kde.org/viewtopic.php?f=74&t=26631
但是,我仍然在Eigen Jacobi.h文件中得到编译错误,更具体地说是在340,341行的编译错误:
x[i] = c * xi + numext::conj(s) * yi;
y[i] = -s * xi + numext::conj(c) * yi;
我从编译器(Vs 2012,Win32,Release和Debug Configuration)中得到以下错误
eigen\src/Jacobi/Jacobi.h(341): error C3767: '*': candidate function(s) not accessible
对于以下情况,operator *在我的自定义类型中定义:
CustomType operator*(CustomType const &_other);
CustomType operator*(double const &_other);
double operator*(CustomType const &_other);
我尝试用以下方式定义conj:
CustomType conj(CustomType const &_type){return _type;}
double conj(customType const &_type){return _type.get();}
我尝试在Eigen :: numext命名空间以及我的CustomType命名空间中定义conj,但没有成功。 任何人都有提示,链接,建议或了解Eigen需要我可能忘记的东西吗?
答案 0 :(得分:1)
很可能是因为您的代码不是const correct。
您的操作员重载应该是:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"RSSView" bundle:nil];
RSSNav *nav_view = [storyboard instantiateViewControllerWithIdentifier:@"RSSNav"];
nav_view.pass_nav_data = [NSString stringWithFormat:@"%@", [action_options objectAtIndex:indexPath.row]];
[self addChildViewController:nav_view];
RSSView *rss_view = [nav_view visibleViewController];
[rss_view setPass_data:pass_nav_data];
nav_view.view.frame = self.view.frame;
[self.view addSubview:nav_view.view];
[nav_view didMoveToParentViewController:self];
如果eigen具有对CustomType operator*(CustomType const &_other) **const**;
CustomType operator*(double const &_other) **const**;
double operator*(CustomType const &_other) **const**;
类型的对象的const引用,则它不能调用您的运算符,因为它们不是const声明的。
即
CustomType
答案 1 :(得分:0)
不确定这是否是问题,但你必须专门化Eigen::NumTraits<T>
。请参阅此manpage。
另外,我不明白如何使用返回不同类型的相同参数的两个conj
函数。