C++ 从C+翻译代码+;德尔菲

C++ 从C+翻译代码+;德尔菲,c++,delphi,C++,Delphi,我有下一个C++代码: for (long i=0; i < num_iter ; i++) { bp->bpgt(data[i%8], &data[i%8][3]); if( bp->mse(&data[i%8][3]) < thresh) break; } 我已尝试将其传递给Delphi代码: for i := 0 to FNum_Iter - 1 do begin FBPN.bpgt(FData[i mo

我有下一个C++代码:

for (long i=0; i < num_iter ; i++)
{
    bp->bpgt(data[i%8], &data[i%8][3]);

    if( bp->mse(&data[i%8][3]) < thresh) 
        break;
}
我已尝试将其传递给Delphi代码:

for i := 0 to FNum_Iter - 1 do begin
    FBPN.bpgt(FData[i mod 8], ^FData[i mod 8,3]);

    if FBPN.mse(@FData[i mod 8, 3]) < FThresh then
      Break;
end;
i:=0到FNum\u Iter-1的
开始
FBPN.bpgt(FData[i mod 8],^FData[i mod 8,3]);
如果FBPN.mse(@FData[i mod 8,3])
<>但是我失败了,因为我是C++新手,我不知道翻译“&”操作符。有人能帮我吗


提前感谢。

允许您将变量的地址而不是值发送到函数中。此引用调用允许函数更改变量的值。我不知道等效的Delphi机制,但您希望在那里传递变量的引用,或者将过程更改为函数,返回值并将其存储在原始变量中。

允许您将变量的地址而不是值发送到函数中。此引用调用允许函数更改变量的值。我不知道等效的Delphi机制,但您希望在那里传递变量的引用,或者将过程更改为函数,返回值并将其存储在原始变量中。

我会翻译

void bpgt(double *in,double *tgt);
作为

嗯,像这样的,我的德尔菲有点生锈了

这样,在bpgt中,您可以更改tgt(和中)的值

您对bpgt的呼叫将是

FBPN.bpgt(FData[i mod 8], FData[i mod 8,3]);
事实上,Delphi的var(callbyreference)经常可用作C/C++传递指针的精确函数等价物

void bpgt(double *in,double *tgt);
作为

嗯,像这样的,我的德尔菲有点生锈了

这样,在bpgt中,您可以更改tgt(和中)的值

您对bpgt的呼叫将是

FBPN.bpgt(FData[i mod 8], FData[i mod 8,3]);

事实上,Delphi的var(通过引用调用)通常可用作C/C++传递指针的精确函数等价物。

如果您很接近,请尝试以下方法:

for i := 0 to FNum_Iter - 1 do begin
    FBPN.bpgt(FData[i mod 8], FData[i mod 8,3]);

    if FBPN.mse(FData[i mod 8, 3]) < FThresh then
      Break;
end;
i:=0到FNum\u Iter-1的
开始
FBPN.bpgt(FData[i mod 8],FData[i mod 8,3]);
如果FBPN.mse(FData[i mod 8,3])

很抱歉,我这里没有delphi可供自己编译和试用。

您很接近,请尝试以下操作:

for i := 0 to FNum_Iter - 1 do begin
    FBPN.bpgt(FData[i mod 8], FData[i mod 8,3]);

    if FBPN.mse(FData[i mod 8, 3]) < FThresh then
      Break;
end;
i:=0到FNum\u Iter-1的
开始
FBPN.bpgt(FData[i mod 8],FData[i mod 8,3]);
如果FBPN.mse(FData[i mod 8,3])

很抱歉,我这里没有delphi可以自己编译和试用。

这是基于您对Fvu答案的回复。如果它们是数组,那会使事情复杂化,因为C没有真正的数组,只是指针上撒了一层薄薄的糖粉。解决方案取决于您是将其完全转换为Delphi,还是尝试编写一个使用C代码的Delphi例程

如果您使用的是纯Delphi,请声明一个数组类型,如下所示

type
   TDoubleArray = array[0..length] of double; //or "array of double" for a dynamic array
然后将函数的参数声明为
var Data:TDoubleArray
。如果这是一个动态数组,让你的for循环从
0变为高位(数据)

如果这需要与C配合使用:

因为C没有真正的数组,所以需要做一些额外的工作。按如下方式声明您的类型:

type
   TCDoubleArray = array[0..65535] of double;
   PCDoubleArray = ^TCDoubleArray;

任何足够大的值都适用于数组的上限。无论如何,我们不会全部使用。它必须比你用过的还要大。将参数类型设为PCDoubleArray,它对应于
double*
。您需要传递一个额外的参数,它告诉您数组的端点在哪里。让for循环从0转到终点,然后通过说出类似于
FData^[i mod 8]

的话来访问它。这是基于您对Fvu答案的回复。如果它们是数组,那会使事情复杂化,因为C没有真正的数组,只是指针上撒了一层薄薄的糖粉。解决方案取决于您是将其完全转换为Delphi,还是尝试编写一个使用C代码的Delphi例程

如果您使用的是纯Delphi,请声明一个数组类型,如下所示

type
   TDoubleArray = array[0..length] of double; //or "array of double" for a dynamic array
然后将函数的参数声明为
var Data:TDoubleArray
。如果这是一个动态数组,让你的for循环从
0变为高位(数据)

如果这需要与C配合使用:

因为C没有真正的数组,所以需要做一些额外的工作。按如下方式声明您的类型:

type
   TCDoubleArray = array[0..65535] of double;
   PCDoubleArray = ^TCDoubleArray;
任何足够大的值都适用于数组的上限。无论如何,我们不会全部使用。它必须比你用过的还要大。将参数类型设为PCDoubleArray,它对应于
double*
。您需要传递一个额外的参数,它告诉您数组的端点在哪里。让for循环从0转到终点,然后通过说出类似于
FData^[i mod 8]
的话来访问它。在,他有一个。在我看来,这是尝试执行此任务时的基本信息。以下是描述:

这篇文章是为每一个 需要将C/C++头翻译为 德尔菲。我想和大家分享一些 你在工作时可能遇到的陷阱 从C或C++转换。本文 这不是一个教程,只是一个讨论 常见问题分析 案例。这是为初学者准备的 对于更有经验的人也是如此 C和C++的翻译程序 他还编写了一个“”安装到Delphi IDE中,这有助于将C/C++代码转换为Delphi:


(来源:)

他关于这一主题的其他相关文章包括:

在,他有一个。在我看来,这是尝试执行此任务时的基本信息。以下是描述:

这篇文章是为每一个 需要将C/C++头翻译为 德尔菲。我想和大家分享一些 你在工作时可能遇到的陷阱 从C或C++转换。本文 这不是一个教程,只是一个讨论 常见问题分析 案例。是我