好的,我有以下功能:
function TfPackagedItemEdit.GetRTFDescription: TStringList;
begin
Result.Text := richDescription.Lines.Text; //stringlist
end;
Run Code Online (Sandbox Code Playgroud)
编译器会对此行生成以下警告:
[DCC警告] W1035函数'GetRTFDescription'的返回值可能未定义
关于如何清除此警告的任何想法?(除了在项目选项中关闭它)
我试过了:
function TfPackagedItemEdit.GetRTFDescription: TStringList;
begin
Result.Text := '';
Result.Text := richDescription.Lines.Text;
end;
Run Code Online (Sandbox Code Playgroud)
但这也不起作用.
Rob*_*edy 21
Result默认情况下,该变量未初始化.它不会自动引用某些编译器生成的TStringList实例.您需要为其分配值Result.这意味着在代码中的某处有这样的行:
Result := ...;
Run Code Online (Sandbox Code Playgroud)
类似于读取值的表达式Result.X是为了获取对其成员的引用,因此您需要已经给出了一个值.拉里的回答演示了如何做到这一点.它会生成一个新实例,因此该函数的调用者需要在某个时候调用该对象.ResultXResult TStringListFree
但是在评论中,您提到您正在使用此功能作为属性访问器.对于呼叫者来说,每次阅读财产时必须释放对象是不方便的,因此您的整个计划可能不合适.由于您似乎正在尝试公开描述文本,因此您可能需要考虑以下内容:
function TfPackagedItemEdit.GetRTFDescription: TStrings;
begin
Result := richDescription.Lines;
end;
Run Code Online (Sandbox Code Playgroud)
首先请注意,我已将返回类型更改为TStrings,这实际上是整个VCL中各种字符串列表的抽象基类.TStringList是一个后代,但TRichEdit.Lines不使用TStringList.相反,它使用一个专门的TStrings后代,知道如何与底层的富编辑控件进行交互.
接下来,请注意我还没有创建任何新对象.相反,我已经直接向控件的Lines属性返回了引用.您的RTFDescription财产的用户不再需要担心释放他们获得的对象.
Law*_*nti 14
编译器是正确的.默认情况下不会初始化结果.尝试
function TfPackagedItemEdit.GetRTFDescription: TStringList;
begin
Result = TStringList.Create();
Result.Text := richDescription.Lines.Text;
end;
Run Code Online (Sandbox Code Playgroud)
更新:在审核评论后,我认为原始海报实际上需要这样的东西.
function TfPackagedItemEdit.GetRTFDescription: String;
begin
Result := richDescription.Lines.Text;
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4414 次 |
| 最近记录: |