Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C++;到Delphi(简单) 我在C++中有一个函数,我试图在Delphi中复制: typedef-double-ANNcoord;//坐标数据类型 typedef ANNcoord*ANNpoint;//一点 typedef ANNpoint*ANNpointArray;//一组点 bool readPt(istream&in,ANNpoint p)//读取点(EOF为false) { 对于(int i=0;i>p[i])返回false; } 返回true; }_C++_Delphi_Zeos - Fatal编程技术网

从C++;到Delphi(简单) 我在C++中有一个函数,我试图在Delphi中复制: typedef-double-ANNcoord;//坐标数据类型 typedef ANNcoord*ANNpoint;//一点 typedef ANNpoint*ANNpointArray;//一组点 bool readPt(istream&in,ANNpoint p)//读取点(EOF为false) { 对于(int i=0;i>p[i])返回false; } 返回true; }

从C++;到Delphi(简单) 我在C++中有一个函数,我试图在Delphi中复制: typedef-double-ANNcoord;//坐标数据类型 typedef ANNcoord*ANNpoint;//一点 typedef ANNpoint*ANNpointArray;//一组点 bool readPt(istream&in,ANNpoint p)//读取点(EOF为false) { 对于(int i=0;i>p[i])返回false; } 返回true; },c++,delphi,zeos,C++,Delphi,Zeos,在Delphi中,我相信我已经正确地声明了数据类型。。(我可能错了): 类型 IPtr=^IStream;//指向Istream的指针 ANNcoord=双精度; ANNpoint=^ANNcoord; 函数readPt(inpt:IPtr;p:ANNpoint):布尔; 变量 i:整数; 开始 对于i:=0,将其变暗 开始 结束; 结束; 但是我无法理解如何模仿C++函数中的行为(可能是因为我不理解位移操作符)。p> 此外,我需要最终弄清楚如何将点集从ZeosTZQuery对象传输到相同的数

在Delphi中,我相信我已经正确地声明了数据类型。。(我可能错了):

类型
IPtr=^IStream;//指向Istream的指针
ANNcoord=双精度;
ANNpoint=^ANNcoord;
函数readPt(inpt:IPtr;p:ANNpoint):布尔;
变量
i:整数;
开始
对于i:=0,将其变暗
开始
结束;
结束;
<>但是我无法理解如何模仿C++函数中的行为(可能是因为我不理解位移操作符)。p> 此外,我需要最终弄清楚如何将点集从Zeos
TZQuery
对象传输到相同的数据类型-因此,如果有人对此有任何意见,我将非常感激

试试看:

type
  ANNcoord = Double;
  ANNpoint = ^ANNcoord;

function readPt(inStr: TStream; p: ANNpoint): boolean;
var
  Size: Integer; // number of bytes to read
begin
  Size := SizeOf(ANNcoord) * dim; 
  Result := inStr.Read(p^, Size) = Size;
end;
无需单独阅读每个ANNcoord。注意,ISReAM是流类,而不是C++中的istrAM接口。德尔福的等价物是TStream。代码假定流被打开以读取(创建具有适当参数的Cd—D),当前流指针指向ANCOCORDS的数量(DIM),就像C++代码一样。 FWIW
in>>p[i]
从输入流
in
p[i]
读取
ANNcoord
,将
p
解释为指向
ANNcoords
数组的指针

更新 正如Rob Kennedy指出的那样,>>myDouble中的
从输入流中读取一个double,但该流被解释为文本流,而不是二进制,即它看起来像:

1.345 3.56845 2.452345
3.234 5.141 3.512
7.81234 2.4123 514.1234

etc...   
毫无疑问,Delphi中没有针对流的等效方法或操作。为此,只有
System.Read
System.Readln
。显然,Peter Lower曾经编写了一个
单位流IO
,这使得可以对流使用
System.Read
System.Readln
。我只能在新闻组的帖子里找到


为可以从文本表示中读取双精度、整数、单精度等的流编写包装器可能是有意义的。我还没有看到一个。

C++代码有以下几点:(NPTSp
(ANNPoint)添加到
dataPts
(ANNPointArray)?
TStream.Read
不是此函数的等效函数。C++代码使用<代码> > /Cux>运算符从<代码> istRAMA<代码>中提取值为<代码>双< /代码>。它将流读取为文本,并将每个标记转换为
双精度标记。Delphi代码正在以二进制模式读取流,以便将流的每个8字节直接复制到每个数组元素中。@Rob:Oops,看来你是对的。istream::operator>>读取文本,而不是二进制数据。istream::read读取二进制数据。