高手指路啊~~~~~~~~

allendragon 2006-08-17 05:06:13
下面是一个模版函数
template <class T, int N>
static inline bool ldltdc(T **A, T *rdiag)
{
T v[N-1];
int xx = N; //here is the problem, why N = N+1????
for (int i = 0; i < N; i++) {
for (int k = 0; k < i; k++)
v[k] = A[i][k] * rdiag[k];
for (int j = i; j < N; j++) {
T sum = A[i][j];
for (int k = 0; k < i; k++)
sum -= v[k] * A[j][k];
if (i == j) {
if (unlikely(sum <= T(0)))
return false;
rdiag[i] = T(1) / sum;
} else {
A[j][i] = sum;
}
}
}

return true;
}

在mfc中调用出现下面的情况:
ldltdc<float,3>(w, diag);
调试的时候模版函数中的N=4而不是N=3。
同样的调用在console程序中没有问题,N=3。

这是为什么啊?
...全文
83 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
allendragon 2006-08-17
  • 打赏
  • 举报
回复
int xx = N; //here is the problem, why N = N+1????
你说的是上面这句吗?这句是为了调试加上的,本来的函数中是没有的,即使没有这句仍然有不对啊。
huaren801007 2006-08-17
  • 打赏
  • 举报
回复
在学习mfc对com的支持的时候,记忆当中是mfc只要使用类厂对象创建一个com组件的实例,就会把它的引用计数设为1,然后客户端引用的时候,这时引用计数已经变为2了

以上两个函数的不同在于第一个函数用到了N作为右值,问题应该是出在这里

说的不对的话,见谅!
allendragon 2006-08-17
  • 打赏
  • 举报
回复
又发现下面这个函数好使
// LU decomposition
template <class T, int N>
static inline bool ludcmp(T **a, int *indx, T *d = NULL)
{
int i, j, k;
T vv[N];
if (d)
*d = 1;
for (i = 0; i < N; i++)
。。。。。。
}
撞鬼了啊~~~~~

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧