Как передать значение флажка по ссылке с помощью CLI?

StackOverflow https://stackoverflow.com/questions/1078680

Вопрос

У меня есть приложение с графическим интерфейсом, написанное на C++/CLI, которое имеет множество настраиваемых параметров.У меня есть несколько перегруженных функций, которые получают значения из моего источника данных, и я хотел бы связать свои параметры с этими значениями.

Итак, вот пара средств извлечения данных:

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

Я надеялся передать флажок Checked геттер/сеттер следующим образом:

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 возвращает логическое значение.

Это было полезно?

Решение

Подумал, что уточню свои комментарии выше и сделаю «настоящий» ответ...

Когда вы вызываете Checked, вы получаете в качестве возвращаемого значения логическое значение, которое представляет текущее состояние CheckBox.Это нет, однако это ссылка на фактический элемент данных, который содержит состояние CheckBox.Фактически, правильно инкапсулированный класс не должен предоставлять к нему доступ.Более того, поскольку Checked возвращает логическое значение по значению, это логическое значение является временным объектом, который не обязательно существует к моменту вызова GetCongigSingle.

Это оставляет вам несколько вариантов.Либо передать логическое значениеs по значению, а затем установите состояние CheckBox или передайте сам CheckBox по ссылке и «проверьте» его там, где захотите.

Другие советы

Две перегрузки метода GetConfigSingleFile оба, как вы упомянули, принимают два аргумента, тогда как вы передаете методу 4 аргумента.Есть ли аргументы по умолчанию?Если да, можете ли вы воспроизвести исходные объявления методов?

Скорее всего, перегрузка этого метода с четырьмя аргументами ожидает String^% в качестве второго аргумента.В любом случае это то, что предлагает компилятор.Но если мы сможем взглянуть на объявления методов, это поможет диагностировать проблему.

Это не ответ на мой вопрос, но об этом стоит знать - видимо, есть особенность передачи свойств по ссылке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top