Domanda

Sto cercando di compilare il seguente codice in C ++

string initialDecision () 
{
 char decisionReviewUpdate;

 cout << "Welcome. Type R to review, then press enter." << endl;
 cin >> decisionReviewUpdate;

 // Processing code
}

int main()
{
    string initialDecision;
    initialDecision=initialDecision();

    //ERROR OCCURS HERE

 // More processing code
 return 0;
}

Proprio dove si dice "errore si verifica qui", ottengo il seguente errore durante la compilazione: "Errore:.? No Match per Call a '(std :: string) ()' Come posso risolvere questo

È stato utile?

Soluzione

Non dare la stringa e la funzione lo stesso nome, e l'errore andrà via.

Il compilatore è "dimenticato" che ci sia una funzione con lo stesso nome, quando si dichiara una variabile locale con lo stesso nome.

Altri suggerimenti

La variabile locale ombre il nome della funzione globale. E 'meglio rinominare la variabile locale, ma c'è anche l'operatore di portata che consente di accedere in particolare il nome globale:

initialDecision = ::initialDecision();

Questa è chiamata "nome nascosto" in C ++. In questo particolare esempio, si dichiara una variabile locale, che ha lo stesso nome di una funzione in ambito namespace. Dopo il punto della dichiarazione di tale variabile la funzione diventa nascosto , e ogni volta che si menziona il nome di 'initialDecision' il compilatore giustamente supporre che ci si riferisce alla variabile. Dal momento che non è possibile applicare l'operatore di chiamata della funzione '()' a una variabile di tipo 'string', il compilatore emette il messaggio di errore.

In molti casi, al fine di fare riferimento a nomi nascosti è possibile utilizzare l'operatore di risoluzione dell'ambito '::'. Vedi risposta UncleBens, per esempio.

Provare a rinominare la variabile di non corrispondere al nome della funzione.

Il problema è che si sta ripetendo il nome initialDecision come sia una variabile e una funzione. Questo confonde il compilatore notevolmente. Provare a rinominare la variabile a qualcos'altro; sarà poi lavorare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top