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 .

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top