18

当我想编译时,我得到:问题:在“return”return 0 之前预期的 unqualified-id;关于最后一行:错误:{令牌之前的expexted声明

我将代码保持不变,只是我更改的中间部分......有什么问题???这是我的代码:


#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;
}


----------
4

4 回答 4

24

只是为了那些出于同样原因登陆这里的人:

不要使用保留关键字

我在类定义中命名了一个函数 delete(),这是一个保留关键字,不应该用作函数名。将其重命名为 delete() (在我的情况下这在语义上也有意义)解决了这个问题。

有关保留关键字的列表: http: //en.cppreference.com/w/cpp/keyword

我引用:“由于它们被语言使用,这些关键字不可用于重新定义或重载。”

于 2016-10-13T10:49:36.123 回答
15
if (chapeau) {

您忘记了该if语句的结束大括号,因此后续语句else if被视为语法错误。if当语句体完成时,您需要添加大括号:

if (chapeau) {
    cout << "le Professeur Violet";
}
else if (moustaches) {
    cout << "le Colonel Moutarde";
}
// ...
于 2013-10-04T21:05:12.413 回答
1

建议:

  • 使用一致的 3-4 空格缩进,你会发现这些问题更容易
  • 使用垂直排列 {} 的大括号样式,您会很快看到这些问题
  • 总是缩进控制块另一个级别
  • 使用语法高亮编辑器,它会有所帮助,稍后你会感谢我的

例如,

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
}
于 2013-10-05T01:18:53.610 回答
0

您需要将第一行之前的“ }” 移到cout << endl;第一行之前else

于 2013-10-04T21:07:09.257 回答