Como eu passar um valor checkbox por referência com CLI?
-
21-08-2019 - |
Pergunta
Eu tenho um aplicativo GUI escrito em C ++ / CLI que tem uma carga de opções configuráveis. Eu tenho algumas funções sobrecarregadas que valoriza garra da minha fonte de dados e eu gostaria de conectar as minhas opções para esses valores.
Então aqui está um par de retrievers de dados:
bool GetConfigSingle(long paramToGet, String^% str, char* debug, long debugLength);
bool GetConfigSingle(long paramToGet, bool^% v_value, char* debug, long debugLength);
Eu estava esperando para passar em getter Checked
da caixa / setter da seguinte forma:
result = m_dataSource->GetConfigSingle(CONFIG_OPTION1, this->myOption->Checked, debug, debugLen);
... mas por alguma razão eu recebo um erro do compilador estranho que sugere o valor Checked
não está sendo passado como eu esperaria:
1>.\DataInterface.cpp(825) : error C2664: 'bool DataInterface::GetConfigSingle(long,System::String ^%, char*, long)' : cannot convert parameter 2 from 'bool' to 'System::String ^%'
Anteriormente este código passou a caixa de seleção e modificou os valores em si, mas estou ansioso para quebrar a dependência nossa coleta de dados tem atualmente no Windows Forms.
Então, o que eu falto aqui?
[Edit] Eu preenchido as definições de função como eles eram originalmente a uma confusão evitar -. A minha tentativa de reduzir a informação irrelevent falhou
Estou bastante certo de que o CheckBox getter / retornos setter um bool .
Solução
Pensei em esclarecer minhas observações de cima e torná-lo uma resposta "real" ...
Quando você chama verificado, o que você está ficando para trás como um valor de retorno é um booleano que representa o estado atual da caixa de seleção. É não , no entanto, uma referência para o membro de dados real que mantém o estado da caixa de seleção. Na verdade, uma classe devidamente encapsulados não deve dar acesso a ele. Além disso, desde retornos verificado um bool por valor, que bool é um objeto temporário que não necessariamente existe no momento GetCongigSingle é chamado.
Isso você folhas com várias opções. Ou passar o bool s por valor, e depois definir o estado do CheckBox, ou passar-se o CheckBox por referência e "verificação"-lo onde quiser.
Outras dicas
Os dois sobrecarga do GetConfigSingleFile
método que você mencionou ambos tomam dois argumentos enquanto você está passando 4 argumentos para o método. Existem quaisquer argumentos padrão? Se sim, por favor você pode reproduzir as declarações de método original?
Muito provavelmente, a sobrecarga 4 argumento deste método está esperando um String^%
como o segundo argumento. Isto é o que o compilador está sugerindo qualquer maneira. Mas se podemos ter um olhar para as declarações de métodos que podem ajudar a diagnosticar o problema.
Esta não é uma resposta à minha pergunta, mas vale a pena estar ciente de - aparentemente há uma peculiaridade de passagem, propriedades por referência.