如何通过CLI引用复选框值?

时间:2009-07-03 09:56:17

标签: c++-cli reference pass-by-reference

我有一个用C ++ / CLI编写的GUI应用程序,它有许多可配置的选项。我有一些重载函数从我的数据源中获取值,我想将我的选项连接到这些值。

所以这里有几个数据检索器:

bool GetConfigSingle(long paramToGet, String^% str, char* debug, long debugLength);
bool GetConfigSingle(long paramToGet, bool^% v_value, char* debug, long debugLength);

我希望传递复选框的Checked getter / setter,如下所示:

result = m_dataSource->GetConfigSingle(CONFIG_OPTION1, this->myOption->Checked, debug, debugLen);

...但由于某种原因,我得到一个奇怪的编译器错误,这表明Checked值没有像我期望的那样传递:

1>.\DataInterface.cpp(825) : error C2664: 'bool DataInterface::GetConfigSingle(long,System::String ^%, char*, long)' : cannot convert parameter 2 from 'bool' to 'System::String ^%'

以前这段代码传递了复选框并修改了值本身,但我渴望打破我们的数据收集目前在Windows窗体上的依赖。

那我在这里错过了什么?

[编辑] 我已经填写了函数定义,因为它们最初是为了避免混淆 - 我尝试减少无关紧要的信息失败了。

我很确定the CheckBox getter / setter returns a bool

3 个答案:

答案 0 :(得分:1)

您提到的方法GetConfigSingleFile的两个重载都带有两个参数,而您将4个参数传递给该方法。有没有默认参数?如果是,请您复制原始方法声明吗?

最有可能的是,此方法的4参数重载期望String^%作为第2个参数。无论如何,这是编译器的建议。但是,如果我们可以查看有助于诊断问题的方法声明。

答案 1 :(得分:1)

想想我会从上面澄清我的评论并将其作为一个“真正的”答案......

当您调用Checked时,您返回的值是一个bool,表示CheckBox的当前状态。但是,不是是对保存CheckBox状态的实际数据成员的引用。实际上,正确封装的类不应该提供对它的访问。此外,由于Checked按值返回bool,因此bool是一个临时对象,在调用GetCongigSingle时不一定存在。

这为您提供了多种选择。按值传递 bool ,然后设置CheckBox的状态,或者通过引用传递CheckBox本身并在任何地方“检查”它。

答案 2 :(得分:0)

这不是我的问题的答案,但值得注意 - 显然有a quirk in passing properties by reference