Borland c ++:将OnChange分配给另一个函数时出错?

时间:2015-06-08 08:57:53

标签: c++ function onchange c++builder vcl

我要将OnChange函数分配给另一个函数,如:

XComp->OnChange = SycnroChange(prgManVoltageSet_SB->Address);

但是编译器会给出错误:"不允许输入类型。"

我该怎么办?我不能这样分配吗?

3 个答案:

答案 0 :(得分:0)

IIRC您可以在表单中进行类似的分配 - > onChange = xyz;其中xyz是具有适当签名的另一个函数(或成员函数)。你不能绑定参数和类似的东西。

所以你应该首先更改SynchroChange签名(大多数事件处理程序只需要一个通用的TObject * Sender),然后在该函数内部寻找prgManVoltageSet(除非可以从参数'Sender'中获取,但我没有足够的上下文此)

答案 1 :(得分:0)

根据您的说法,我知道您希望在SycnroChange(prgManVoltageSet_SB->Address)更改时执行XComp。 所以我认为您可以使用boost::signal2::signalboost::bind的回调函数,例如boost::bind(&SycnroChange, this, _1)。 当XComp发生更改时,您可以调用callback(prgManVoltageSet_SB->Address)来触发并获取int。我希望这些可以帮助您。

答案 2 :(得分:0)

您正在呼叫SycnroChange()并将其返回值分配给OnChangeOnChange事件需要一个指向符合TNotifyEvent签名的对象方法的指针:

typedef void __fastcall (__closure *TNotifyEvent)(System::TObject* Sender);

SycnroChange()的返回值为void。因此错误。

对于您正在尝试的内容,您必须使用内部调用SycnroChange()的单独事件处理程序方法:

__fastcall TGenerator::TGenerator(TComponent *Owner)
    : TForm(Owner)
{
    ...
    // FYI, you can assign this at design-time instead of in code...
    XComp->OnChange = &XComChanged;
    ...
}

void __fastcall TGenerator::XComChanged(TObject *Sender)
{
    SycnroChange(prgManVoltageSet_SB->Address);
}