0

我有一个用 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 窗体的依赖。

那么我在这里错过了什么?

[编辑]为了避免混淆,我已经按照最初的方式填写了函数定义——我试图减少不相关信息的尝试失败了。

我相当确定CheckBox getter / setter 返回一个 bool

4

3 回答 3

1

想我会从上面澄清我的评论并使其成为“真实”的答案......

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

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

于 2009-07-03T11:33:48.740 回答
1

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

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

于 2009-07-03T10:03:30.050 回答
0

这不是我的问题的答案,但值得注意 - 显然通过引用传递属性有一个怪癖

于 2009-07-03T11:01:24.323 回答