【发布时间】:2010-11-07 21:34:36
【问题描述】:
我有一个用 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 窗体的依赖。
那么我在这里错过了什么?
[编辑]为了避免混淆,我已经按照原来的方式填写了函数定义 - 我试图减少不相关信息的尝试失败了。
【问题讨论】:
-
嗯,你为什么要首先通过引用传递布尔值?重点是什么?考虑到 Checked 是一个属性,您没有获得对实际数据成员的引用,因此无论如何您都无法更改它。
-
重点是我想设置一个复选框来表示一个代码/麻烦最少的值。如果您能找到实现这一目标的更好方法,请发表您的想法 - 我很想看到您的建议。
-
也许我今天速度很慢,但我不明白你在做什么。如果您想知道 GetConfigSingle 中复选框的状态,只需传递其值即可。如果要根据GetConfigSingle的结果进行设置,将返回值赋值给Checked。如果您尝试从 GetConfigSingle 内部更改它,则必须将实际复选框作为参数传递并在 GetConfigSingle 中使用它。传递引用会将 ref 传递给 Checked getter 返回的临时对象。
-
Tal Pressman:他想要实现的是复选框是某个布尔变量内容的视觉指示。不幸的是,这并不容易,因为即使您更改了基础值,复选框仍然不会自动重绘,也就是说,您不会在屏幕上看到更改。你必须在这里实现某种观察者模式来实现你想要的。
-
@Tal: "如果你想根据GetConfigSingle的结果来设置,把返回值赋给Checked"——就是这样,但是返回值表示函数是否成功所以我必须传入值作为参考。
标签: c++-cli reference pass-by-reference