FOUT: verwachte niet-gekwalificeerd-ID voor terugkeer in C++

Als ik wil compileren, krijg ik:
Probléme: verwachte niet-gekwalificeerd-ID vóór “terug”
retour 0;
Over laatste regel:
ERNEUR: EXPORTED VERSLAG VOOR {TOKEN

Ik verliet de code ongewijzigd alleen het middendeel dat ik veranderde … Wat is het probleem ???
Hier is mijn code:


#include <iostream>
using namespace std;
int main()
{
  cout << "Pensez a un personnage : Mlle Rose, le Professeur Violet, "
       << "le Colonel Moutarde," << endl
       << "le Reverend Olive ou Mme Leblanc." << endl << endl;
  cout << "Votre personnage a-t-il des moustaches (1 : oui, 0 : non) ? ";
  bool moustaches;
  cin >> moustaches;
  cout << "Votre personnage porte-t-il des lunettes ? ";
  bool lunettes;
  cin >> lunettes;
  cout << "Votre personnage porte-t-il un chapeau ? ";
  bool chapeau;
  cin >> chapeau;
  cout << "Est-ce que votre personnage est un homme ? ";
  bool homme;
  cin >> homme;
  cout << "==> Le personnage auquel vous pensez est ";
  if (chapeau) {
    /*******************************************
     * Completez le programme a partir d'ici.
     *******************************************/
    cout << "le Professeur Violet";
    else if (moustaches) {
        cout << "le Colonel Moutarde";
    }
    else if (not lunettes) {
        cout << "Mlle Rose";
    }
    else if (homme) {
        cout <<"le Révérend Olive";
    }
    else {
        cout <<"Mme Leblanc";
    }
    /*******************************************
     * Ne rien modifier apres cette ligne.
     *******************************************/
  }
  cout << endl;
  return 0;
}
----------

Antwoord 1, Autoriteit 100%

Net omwille van de mensen die hier landde om dezelfde reden dat ik deed:

Gebruik geen gereserveerde woorden

ik noemde een functie in mijn klas definitie delete (), die is een gereserveerde zoekwoord en mag niet worden gebruikt als een functie naam. Hernoemen naar deletie () (die ook zin semantisch gemaakt in mijn geval) het probleem opgelost.

Voor een lijst van gereserveerde keywords:
http://en.cppreference.com/w/cpp/keyword

Ik citeer:
“Omdat ze worden gebruikt door de taal, deze zoekwoorden zijn niet beschikbaar voor re-definition of overbelasting.”


Antwoord 2, Autoriteit 78%

if (chapeau) {

U bent vergeten het einde brace om dit ifverklaring, zodat de daaropvolgende else ifwordt beschouwd als een syntax error. U moet de beugel toe te voegen wanneer de ifstatement lichaam is compleet:

if (chapeau) {
    cout << "le Professeur Violet";
}
else if (moustaches) {
    cout << "le Colonel Moutarde";
}
// ...

Antwoord 3

U moet verplaatsen “}” vóór de lijn van cout << endl;om de lijn voor de eerste else.


Antwoord 4

Suggesties:

  • Gebruik consistente 3-4 ruimte inspringen en je zult vinden voor deze problemen veel gemakkelijker
  • gebruik maken van een brace stijl die lijnen {} verticaal en u zult deze problemen snel zien
  • altijd streepje regelblokken ander niveau
  • gebruik maken van een syntax highlighting editor, het helpt, je zult me ​​later dankbaar

Bijvoorbeeld,

type
functionname( arguments )
{
    if (something)
    {
        do stuff
    }
    else
    {
        do other stuff
    }
    switch (value)
    {
        case 'a':
            astuff
            break;
        case 'b':
            bstuff
            //fallthrough //always comment fallthrough as intentional
        case 'c':
            break;
        default: //always consider default, and handle it explicitly
            break;
    }
    while ( the lights are on )
    {
        if ( something happened )
        {
            run around in circles
            if ( you are scared ) //yeah, much more than 3-4 levels of indent are too many!
            {
                scream and shout
            }
        }
    }
    return typevalue; //always return something, you'll thank me later
}

Other episodes