首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与错误混淆-- E2193调用'_fastcall TComponent::GetComponent(int)中的参数太少

与错误混淆-- E2193调用'_fastcall TComponent::GetComponent(int)中的参数太少
EN

Stack Overflow用户
提问于 2022-09-06 02:09:02
回答 1查看 52关注 0票数 0

我试图通过编程方式使用下面的代码从它的父容器中删除选定的组件(我可能不正确地使用found,但这不是问题,建议是欢迎的):

代码语言:javascript
复制
void __fastcall TScrollControlsListContainer::RemoveItem(TWinControl* ctrl)
{
    // find control in vector containing TWinControl(s)
    std::vector<FWinControl*>::iterator found = std::find_if(FWinControls.begin(), FWinControls.end(), IsCtrl(ctrl));
    if(found != FWinControls.end())
    {
        Components->RemoveComponent(dynamic_cast<TComponent*>(found));
        //[bcc32 Error] ScrollControlsListContainer.cpp(208): E2193 Too few parameters in call to '_fastcall TComponent::GetComponent(int)' Full parser context
    
        FWinControls.erase(found);
    }
}

我对错误感到困惑,因为根据下面的帮助文件示例,只需要一个参数:

代码语言:javascript
复制
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int I;
    TComponent *Temp;
    Memo1->Lines->Add("Components removed: ");
    Form2->Memo1->Lines->Add("Components added: ");
    for (I = ComponentCount - 1; I >= 0; I--)
    {
        Temp = Components[I];
        // Move only the components that are not controls.
        if (dynamic_cast<TControl *>(Temp) == NULL)
        {
            RemoveComponent(Temp);
            Memo1->Lines->Add(Temp->Name);
            Form2->InsertComponent(Temp);
            Form2->Memo1->Lines->Add(Temp->Name);
        }
    }
}

我在这里错过了什么?

EN

回答 1

Stack Overflow用户

发布于 2022-09-06 22:42:19

TScrollControlsListContainer是从TScrollBox派生的。

Components->RemoveComponent(dynamic_cast(found));//

我使用上述代码计算的错误是因为我在RemoveComponent之前使用了组件->,一旦我删除了它,错误就消失了,找到了雷米建议的,并且我计算出不能以这种方式使用,因为它没有指向我想要删除的实际控件。

以下代码工作正常

代码语言:javascript
复制
void __fastcall TScrollControlsListContainer::RemoveItem(TWinControl* ctrl)
{
std::vector<FWinControl*>::iterator found = std::find_if(FWinControls.begin(), FWinControls.end(), IsCtrl(ctrl));
if(found != FWinControls.end())
    {
    int i = std::distance(FWinControls.begin(), found);

    RemoveComponent(FWinControls[i]->b);

    delete FWinControls[i]->b;

    FWinControls.erase(found);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73616043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档