我遇到了一个我无法弄清楚的问题,我对c ++仍然很陌生。 这是一段代码:
#define secondsInHour 3600;
#define secondsInMinute 60;
using namespace std;
int main()
{
int totalSeconds;
int convertedHours;
int convertedMinutes;
int convertedSeconds;
cout << "Enter time in seconds: ";
cin >> totalSeconds;
cout << endl;
convertedHours = totalSeconds / secondsInHour;
convertedMinutes = (totalSeconds - (convertedHours*secondsInHour))/secondsInMinute; //D
return 0;
}
当我尝试运行时,收到以下错误:预期为')' 谁能解释一下?错误指的是倒数第二行。
编辑:我正在使用Visual Studio 2015.抱歉,我指的是错误的行。产生错误的行是“convertedMinutes = ....”答案 0 :(得分:5)
问题在于#define
宏中的分号。
当预处理器将宏的文本替换为代码时,编译器看到的代码如下所示:
using namespace std;
int main()
{
int totalSeconds;
int convertedHours;
int convertedMinutes;
int convertedSeconds;
cout << "Enter time in seconds: ";
cin >> totalSeconds;
cout << endl;
convertedHours = totalSeconds / 3600;;
convertedMinutes = (totalSeconds - (convertedHours*3600;))/60;; //D
return 0;
查看secondsInHour
宏中的额外分号如何打破convertedMinutes
表达式?
您需要删除分号:
#define secondsInHour 3600
#define secondsInMinute 60
答案 1 :(得分:5)
此代码:
#define secondsInHour 3600;
#define secondsInMinute 60;
有以下问题:
你不应该在这种情况下使用#define
如果您使用#define
更好地使用大写的MACRO名称以避免冲突
如果您使用#define
请勿在末尾添加分号
所以:
const int secondsInHour = 3600;
const int secondsInMinute = 60;
或
#define secondsInHour 3600
#define secondsInMinute 60
甚至更好
#define SECONDS_IN_HOUR 3600
#define SECONDS_IN_MINUTE 60
但首选变体是首选,因为它不会给出像这样的意外惊喜