2013-10-04 38 views
8

當我想編譯時我得到: 問題:預期在返回前不合格id爲 return 0; 關於最後一行: erreur:在{token}錯誤:預期在C++中返回非限定id

錯誤宣言: 這裏是我的代碼:


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


---------- 

回答

8
if (chapeau) { 

你忘了結束括號這個if語句,所以後續else if被認爲是一個語法錯誤。您需要添加支架的if聲明體完成時:

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

THX但我還是在最後2行發生錯誤: return 0; }預計在返回錯誤之前出現非限定ID:預期聲明在{token – user2774480

+0

檢查我的答案,你的問題是你的一個'}'錯位。 –

+0

@ user2774480最初的'if'語句的結尾大括號仍然在'else if'行的末尾。請刪除它,錯誤應該消失。 – 0x499602D2

0

你需要第一else之前的cout << endl;的行前行移動「}」。

0

建議:

  • 使用一致的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 
} 
6

只爲人民着想誰降落在這裏出於同樣的原因我所做的:

不要使用保留關鍵字

我在班級命名的功能定義delete(),這是一個保留關鍵字,不應該用作函數名稱。將它重命名爲delete()(這在我的例子中也是有意義的)解決了這個問題。

對於保留關鍵字的列表: http://en.cppreference.com/w/cpp/keyword

我引述: 「因爲它們被使用的語言,這些關鍵字不能用於重新定義或超載。」

相關問題