为什么我的 C++ 代码出现 "undeclared identifier" 错误?
Why am i getting an "undeclared identifier" error in my c++ code?
所以我们在学校被分配创造一个 class 时间。他们希望我们将 class 与 time.h 头文件、time.cpp cpp 文件和 main.cpp cpp 文件分开。我有以下代码,但由于某种原因,我不断收到 "undeclared identifier" 错误。所有 3 个文件现在都包含在我的项目中。
代码如下:
time.h
class time
{
private:
int hours;
int minutes;
int seconds;
public:
time();
time(int sec);
time(int h, int min, int sec);
int getTime();
void setHours(int h);
void setMinutes(int min);
void setSeconds(int sec);
bool equals(time t);
void addTime(time t);
void printTime();
void normalize();
};
time.cpp
#include "time.h"
#include <iostream>
#include <iomanip>
using namespace std;
time::time()
{}
time::time(int sec)
{}
time::time(int h, int min, int sec)
{}
int time::getTime()
{
return (hours * 60 * 60) + (minutes * 60) + seconds;
}
void time::setHours(int h)
{
hours = h;
}
void time::setMinutes(int min)
{
minutes = min;
}
void time::setSeconds(int sec)
{
seconds = sec;
}
bool time::equals(time t)
{
if (hours == t.hours && minutes == t.minutes && seconds == t.seconds)
return true;
else return false;
}
void time::addTime(time t)
{
hours += t.hours;
minutes += t.minutes;
seconds += t.seconds;
}
void time::printTime()
{
cout << setfill('0') << setw(2) << hours
<< ":" << setfill('0') << setw(2) << minutes
<< ":" << setfill('0') << setw(2) << seconds;
}
void time::normalize()
{
seconds %= 60;
minutes = minutes + (seconds / 60);
hours = hours + (minutes / 60);
minutes = minutes % 60;
}
main.cpp
#include "time.h"
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
time time1;
int seconds1;
cout << "Enter the amount of seconds: ";
cin >> seconds1;
time time2(seconds1);
int hours2, minutes2, seconds2;
cout << "Enter the amount of hours: ";
cin >> hours2;
cout << "Enter the amount of muinutes: ";
cin >> minutes2;
cout << "Enter the amount of seconds: ";
cin >> seconds2;
time time3(hours2, minutes2, seconds2);
time1.equals(time2);
}
编译给定的代码我收到一大堆错误消息,最明显的是
warning: statement is a reference, not call, to function 'time'
time time1;
^
这导致 time1
被报告为未稍后声明,因为它不是。
标准库包含 header time.h 和函数 time.
以确保程序包含正确的 time.h 并使用正确的 time
,我将 header 重命名为我的 time.h,将 time
class 重命名为 mytime
。一旦消除了歧义,所有错误都会消失(一些关于未使用参数的警告仍然存在)。
我建议使用比 mytime
稍微平淡一些的名称,但只要名称是描述性的并且没有更多冲突,您可以随意使用任何名称。
所以我们在学校被分配创造一个 class 时间。他们希望我们将 class 与 time.h 头文件、time.cpp cpp 文件和 main.cpp cpp 文件分开。我有以下代码,但由于某种原因,我不断收到 "undeclared identifier" 错误。所有 3 个文件现在都包含在我的项目中。
代码如下:
time.h
class time
{
private:
int hours;
int minutes;
int seconds;
public:
time();
time(int sec);
time(int h, int min, int sec);
int getTime();
void setHours(int h);
void setMinutes(int min);
void setSeconds(int sec);
bool equals(time t);
void addTime(time t);
void printTime();
void normalize();
};
time.cpp
#include "time.h"
#include <iostream>
#include <iomanip>
using namespace std;
time::time()
{}
time::time(int sec)
{}
time::time(int h, int min, int sec)
{}
int time::getTime()
{
return (hours * 60 * 60) + (minutes * 60) + seconds;
}
void time::setHours(int h)
{
hours = h;
}
void time::setMinutes(int min)
{
minutes = min;
}
void time::setSeconds(int sec)
{
seconds = sec;
}
bool time::equals(time t)
{
if (hours == t.hours && minutes == t.minutes && seconds == t.seconds)
return true;
else return false;
}
void time::addTime(time t)
{
hours += t.hours;
minutes += t.minutes;
seconds += t.seconds;
}
void time::printTime()
{
cout << setfill('0') << setw(2) << hours
<< ":" << setfill('0') << setw(2) << minutes
<< ":" << setfill('0') << setw(2) << seconds;
}
void time::normalize()
{
seconds %= 60;
minutes = minutes + (seconds / 60);
hours = hours + (minutes / 60);
minutes = minutes % 60;
}
main.cpp
#include "time.h"
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
time time1;
int seconds1;
cout << "Enter the amount of seconds: ";
cin >> seconds1;
time time2(seconds1);
int hours2, minutes2, seconds2;
cout << "Enter the amount of hours: ";
cin >> hours2;
cout << "Enter the amount of muinutes: ";
cin >> minutes2;
cout << "Enter the amount of seconds: ";
cin >> seconds2;
time time3(hours2, minutes2, seconds2);
time1.equals(time2);
}
编译给定的代码我收到一大堆错误消息,最明显的是
warning: statement is a reference, not call, to function 'time' time time1; ^
这导致 time1
被报告为未稍后声明,因为它不是。
标准库包含 header time.h 和函数 time.
以确保程序包含正确的 time.h 并使用正确的 time
,我将 header 重命名为我的 time.h,将 time
class 重命名为 mytime
。一旦消除了歧义,所有错误都会消失(一些关于未使用参数的警告仍然存在)。
我建议使用比 mytime
稍微平淡一些的名称,但只要名称是描述性的并且没有更多冲突,您可以随意使用任何名称。