Come passo davanti a un valore di casella di controllo per riferimento con CLI?
-
21-08-2019 - |
Domanda
Ho un applicazione GUI scritta in C ++ / CLI, che ha un carico di opzioni configurabili. Ho alcune funzioni sovraccaricate che afferrano i valori dalla mia fonte di dati e vorrei collegare le mie opzioni a quei valori.
Quindi, ecco un paio di cani da riporto di dati:
bool GetConfigSingle(long paramToGet, String^% str, char* debug, long debugLength);
bool GetConfigSingle(long paramToGet, bool^% v_value, char* debug, long debugLength);
speravo di passare del casella Checked
getter / setter come segue:
result = m_dataSource->GetConfigSingle(CONFIG_OPTION1, this->myOption->Checked, debug, debugLen);
... ma per qualche ragione ho un errore del compilatore strano che suggerisce la <=> valore non viene passata come mi aspetto:
1>.\DataInterface.cpp(825) : error C2664: 'bool DataInterface::GetConfigSingle(long,System::String ^%, char*, long)' : cannot convert parameter 2 from 'bool' to 'System::String ^%'
In precedenza questo codice superato la casella di controllo e modificato i valori in sé, ma sono desiderosi di rompere la dipendenza nostra raccolta di dati ha attualmente su Windows Form.
Allora, cosa mi manca qui?
[Edit] Ho riempito le definizioni di funzioni come erano in origine dovevano evitare confusione -. Il mio tentativo di ridurre le informazioni irrelevent fallito
Sono abbastanza certo che la CheckBox getter / setter restituisce un bool .
Soluzione
Ho pensato di chiarire i miei commenti dall'alto e renderlo una risposta "vera" ...
Quando si chiama controllato, quello che stai ricevendo indietro come un valore di ritorno è un bool che rappresenta lo stato attuale della casella di controllo. Si tratta di non , tuttavia, un riferimento al membro di dati effettivo che mantiene lo stato del CheckBox. In realtà, una classe adeguatamente incapsulato non dovrebbe dare accesso ad esso. Inoltre, poiché i rendimenti Controllato un bool per valore, che bool è un oggetto temporaneo che non esiste necessariamente dal momento GetCongigSingle viene chiamato.
Questo vi lascia con diverse opzioni. O passare il bool s per valore, e successivamente impostare lo stato del CheckBox, o passare il CheckBox in sé per riferimento e "check" dove si vuole.
Altri suggerimenti
I due overload del metodo GetConfigSingleFile
che hai citato entrambi prendono due argomenti, mentre si passa 4 argomenti al metodo. Ci sono argomenti di default? Se sì, ti invitiamo a riprodurre le dichiarazioni di metodo originale?
Molto probabilmente, il sovraccarico 4 argomento di questo metodo si aspetta una String^%
come il 2 ° argomento. Questo è ciò che il compilatore sta suggerendo comunque. Ma se possiamo avere uno sguardo ai dichiarazioni di metodo che potrebbe aiutare a diagnosticare il problema.
Questa non è una risposta alla mia domanda, ma vale la pena di essere a conoscenza di - a quanto pare c'è un capriccio passando proprietà per riferimento .