我遇到了一个我无法弄清楚的问题,我对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 = ...."
问题在于#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
这段代码:
#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
但第一个变种是首选,因为它不会给出这样的意外惊喜