delphi – 函数的返回值可能未定义
好的,我有以下功能:
function TfPackagedItemEdit.GetRTFDescription: TStringList; begin Result.Text := richDescription.Lines.Text; //stringlist end; 编译器会对此行生成以下警告: [DCC警告] W1035函数’GetRTFDescription’的返回值可能未定义 关于如何清除此警告的任何想法? (除了在项目选项中关闭它) 我试过了: function TfPackagedItemEdit.GetRTFDescription: TStringList; begin Result.Text := ''; Result.Text := richDescription.Lines.Text; end; 但这也不起作用. 解决方法
默认情况下,Result变量未初始化.它不会自动引用某些编译器生成的TStringList实例.您需要为Result分配一个值.这意味着在代码中的某处有这样的行:
Result := ...; 像Result.X这样的表达式正在读取Result的值以获取对其X成员的引用,因此您需要已经为Result赋予了一个值. Larry’s answer演示了如何做到这一点.它会生成一个新的TStringList实例,因此该函数的调用者需要在某个时间对该对象调用Free. 但是在评论中,您提到您正在使用此功能作为属性访问器.对于呼叫者来说,每次阅读财产时必须释放对象是不方便的,因此您的整个计划可能不合适.由于您似乎正在尝试公开描述文本,因此您可能需要考虑以下内容: function TfPackagedItemEdit.GetRTFDescription: TStrings; begin Result := richDescription.Lines; end; 首先请注意,我已将返回类型更改为TStrings,它实际上是整个VCL中各种字符串列表的抽象基类. TStringList是一个后代,但TRichEdit.Lines不使用TStringList.相反,它使用专门的TStrings后代,知道如何与底层的富编辑控件进行交互. 接下来,请注意我还没有创建任何新对象.相反,我已直接返回控件的Lines属性的引用.您的RTFDescription属性的用户不再需要担心释放他们获得的对象. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |