vs移植linux为什么一堆神奇的问题,c++ - 将代码从Linux和MacOS移植到Visual Studio 2015时出现错误C2672和C2784 - 堆栈内存溢出...

block_sparrse_matrix.h

#include "ldl_decomposition.h"

SMVS_NAMESPACE_BEGIN

template

void

BlockSparseMatrix::invert_blocks_inplace(void)

{

for (std::size_t i = 0; i < this->values.size(); ++i)

{

std::array b = values[i];

ldl_inverse(b.begin(), N);

bool nancheck = false;

for (int i = 0; i < N * N; ++i)

if (std::isnan(b[i]))

nancheck = true;

if(nancheck)

continue;

values[i] = b;

}

}

ldl_decomposition.h

SMVS_NAMESPACE_BEGIN

template

void

ldl_inverse(T * A, int const size)

{

T * L = new T[size * size];

T * D = new T[size];

std::fill(L, L + size * size, 0.0);

std::fill(D, D + size, 0.0);

/* Factorize A into LDL^T */

for (int j = 0; j < size; ++j)

{

D[j] = A[j * size + j];

L[j * size + j] = 1.0;

for (int k = 0 ; k < j; ++k)

D[j] -= (L[j * size + k] * L[j * size + k]) * D[k];

if (D[j] == 0.0)

return;

for (int i = j+1; i < size; ++i)

{

L[i * size + j] = A[i * size + j];

for (int k = 0 ; k < j; ++k)

L[i * size + j] -= L[i * size + k] * D[k] * L[j * size + k];

L[i * size + j] /= D[j];

}

}

/* Invert L */

for (int i = 0; i < size; ++i)

for (int j = i+1; j < size; ++j)

{

T sum(0);

for (int k = i ; k < j; ++k)

sum -= L[j * size + k] * L[k * size + i];

L[j * size + i] = sum;

}

/* Invert D */

for (int i = 0; i < size; ++i)

D[i] = 1.0 / D[i];

/* Combine Matrices */

combine_ldl(L, D, size, A);

/* Cleanup memory */

delete[] L;

delete[] D;

}

我想让它在Windows上运行,但它是错误的。

Error C2672 'ldl_inverse': no matching overloaded function found

(compiling source file E:\mve\libs\smvsrecon\gauss_newton_step.cc)

Error C2784 'void smvs::ldl_inverse(T *,const int)': could not deduce

template argument for 'T *' from 'std::_Array_iterator<_ty>'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值