我正在嘗試做一些C++練習,但是我在編譯時遇到了一個錯誤,它不會跳到我身上。我錯過了什麼?在C#等人完成之前,我剛回到C++。追蹤奇怪的錯誤
[錯誤] 語法錯誤: '迴歸' [/ ERROR]
#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;
}
字符串文字'爲const char *'所以你不應該將其分配給一個'字符*'容器,而你泄露'char ** Drinks'記憶。不妨使用'vector飲料; Drinks.push_back( 「蘇打」); //等等,而這會讓你放棄硬編碼的MaxNumDrinks。 (順便提一句,這是一個小錯誤:你有5杯酒,而不是4杯。) –
ephemient
2010-02-27 07:11:17
沒有連接到編譯錯誤,但是請你自己幫忙併丟掉宏。將'isValidDrinkChoice'重新實現爲一個簡單的函數 - 沒有理由認爲它應該是一個宏,它有許多理由不應該這樣做。 – 2010-02-27 07:41:38
另外:'s /(Choice> 0)/(Choice> = 0)/','s /&argc/argc /','s/* Drinks [Choice]/Drinks [Choice] /' – jfs 2010-02-27 08:37:58