问题描述
我要做的是编译由CMake构建的项目。在我的代码中,我有下一个方法:
What i am trying to do is to compile project which was built by CMake. In my code i have next method:
/** "in-place" version of TriangularView::solve() where the result is written in \a other
*
* \warning The parameter is only marked 'const' to make the C++ compiler accept a temporary expression here.
* This function will const_cast it, so constness isn't honored here.
*
* See TriangularView:solve() for the details.
*/
template<typename MatrixType, unsigned int Mode>
template<int Side, typename OtherDerived>
void TriangularView<MatrixType,Mode>::solveInPlace(const MatrixBase<OtherDerived>& _other) const
{
OtherDerived& other = _other.const_cast_derived();
eigen_assert( cols() == rows() && ((Side==OnTheLeft && cols() == other.rows()) || (Side==OnTheRight && cols() == other.cols())) );
eigen_assert((!(Mode & ZeroDiag)) && bool(Mode & (Upper|Lower)));
enum { copy = internal::traits<OtherDerived>::Flags & RowMajorBit && OtherDerived::IsVectorAtCompileTime };
typedef typename internal::conditional<copy,
typename internal::plain_matrix_type_column_major<OtherDerived>::type, OtherDerived&>::type OtherCopy;
OtherCopy otherCopy(other);
internal::triangular_solver_selector<MatrixType, typename internal::remove_reference<OtherCopy>::type,
Side, Mode>::run(nestedExpression(), otherCopy);
if (copy)
other = otherCopy;
}
当我尝试编译时,出现下一个错误:
When i try to compile i get next error:
error C2280 "Eigen::Block<Derived,-1,-1,false> &Eigen::Block<Derived,-1,-1,false>::operator =(const Eigen::Block<Derived,-1,-1,false> &)": attempting to reference a deleted function
行
other = otherCopy;
我如何摆脱它?
UPD
当我在OtherDerived上按F12(转到定义)时,光标跳到以下文件中的第332行:
When i hit F12 ("Go to definition") on OtherDerived, cursor jumps to the line #332 in the following file: http://codepad.org/9zN8inib
template<int Side, typename OtherDerived>
void solveInPlace(const MatrixBase<OtherDerived>& other) const;
(第一名)
推荐答案
我自己遇到了这个问题,原来是在Eigen中。就我而言,只需替换src / Eigen / Eigen / src / Core / util / Macros.h中的以下行即可。
I ran into this myself, turned out to be a bug in Eigen. In my case, just replacing the following line in src/Eigen/Eigen/src/Core/util/Macros.h
#if defined(_MSC_VER) && (!defined(__INTEL_COMPILER))
with
#if defined(_MSC_VER) && (_MSC_VER < 1900) && (!defined(__INTEL_COMPILER))
解决了此问题。然后生成赋值运算符。
solved this issue. The assignment operators are then generated.
这篇关于Visual Studio2015。C++编译器错误C2280试图引用已删除的函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!