You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ Builder 10.3中TAdvMemo/TScrMemo调用FindTextInMemo报E2285错误求解

解决C++ Builder 10.3中TScrMemo::FindTextInMemo的E2285匹配错误问题

问题重现

我在C++ Builder 10.3的窗体中使用TScrMemo组件实现文本查找功能时,遇到了如下编译错误:

[bcc32 error] Unit2.cpp (159): E2285 No match found for 'TScrCustomMemo :: FindTextInMemo (UnicodeString, TFindOptionEx)'

我的初始实现代码是这样的:

void __fastcall TForm2::BtnSearchClick(TObject *Sender) {
 String FSearch = EdtSearch->Text;
 Scripter->FindTextInMemo(FSearch,frDown);
}

已知FindTextInMemo有两个重载签名:

int __fastcall FindTextInMemo(System::UnicodeString SearchStr, Vcl::Dialogs::TFindOptions Options)/* overload */;
int __fastcall FindTextInMemo(System::UnicodeString SearchStr, TFindOptionsEx Options)/* overload */;

错误原因

问题的核心在于Delphi集合类型在C++中的处理差异:

  • frDown本质是Delphi集合TFindOptions的一个成员,但在C++中直接传递单个枚举值frDown时,编译器会尝试将其匹配到TFindOptionEx类型的参数(因为单个枚举值和这个类型的签名更“形似”)。
  • 但我们实际需要调用的是接受Vcl::Dialogs::TFindOptions集合类型的重载,所以编译器找不到匹配的方法,就抛出了E2285错误。

解决代码

在C++中,需要显式构建TFindOptions集合对象,通过位操作符<<将frDown添加到集合中,这样就能匹配到正确的重载方法了。修正后的可编译代码如下:

void __fastcall TForm2::BtnSearchClick(TObject *Sender) {
 String FSearch = EdtSearch->Text;
 TFindOptions fn;
 fn = TFindOptions() << frDown;
 Scripter->FindTextInMemo(FSearch,fn);
}

内容的提问来源于stack exchange,提问作者inapathtolearn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:20:32