J'essaie de faire des exercices en C++, mais je suis confronté à une erreur sur la construction, qui ne me vient pas à l'esprit. Qu'est-ce que je rate? Je reviens à C++ de C# et al après l'avoir fait il y a des années.Dépister une erreur étrange
[ERREUR] erreur de syntaxe: 'return' [/ ERREUR]
#include <iostream>
using namespace std;
/* Pre-compiler directives/macros */
#define isValidDrinkChoice(Choice,MaxNumDrinks) ((Choice < MaxNumDrinks) && (Choice > 0))
/* Primary Entry Point for Executable */
int main(const int & argc, char * argv[]){
const int MaxNumDrinks = 4;
char ** Drinks;
Drinks = new char* [MaxNumDrinks];
Drinks[0] = "Soda";
Drinks[1] = "Water";
Drinks[2] = "Coffee";
Drinks[3] = "Tea";
Drinks[4] = "Perrier Sparkling Water";
int Choice = -1;
do while(!isValidDrinkChoice(Choice, MaxNumDrinks)) {
cout << "Please select your favorite drink\r\n\r\n" << endl;
for (int x = 0; x < MaxNumDrinks; x++) cout << "\t" << Drinks[x] << endl;
cin >> Choice;
if (isValidDrinkChoice(Choice, MaxNumDrinks)) cout << "\r\n\r\n" << "You chose " << *Drinks[Choice] << endl;
}
return 0;
}
littéraux de chaîne sont 'const char *' vous ne devriez pas être de les affecter à un conteneur 'char *', et vous êtes une fuite la mémoire 'char ** Drinks'. Pourrait aussi bien utiliser 'vecteur Boissons; Drinks.push_back ("Soda"); // etc' à la place, et cela vous permettra aussi de laisser tomber le 'MaxNumDrinks' codé en dur. (Qui est buggy, d'ailleurs: vous avez 5 boissons, pas 4.) –
ephemient
Non connecté à l'erreur de compilation, mais faites-vous une faveur et perdez la macro. Réimplémentez 'isValidDrinkChoice' comme une simple fonction - il n'y a aucune raison pour que ce soit une macro et il y a plein de raisons pour lesquelles cela ne devrait pas être le cas. –
En outre: 's/(Choix> 0)/(Choix> = 0) /', 's/& argc/argc /', 's/* Boissons [Choix]/Boissons [Choix] /' – jfs