1

我知道这可能以前被问过,但不幸的是我无法调试错误。

我写了一个时间类:

class time
{
public:
    time(); //constructor
    void setTime (int, int, int); //set time
    void dispTime();  //print time
private:
    int hour, minute, second;
};

然后我实现函数成员:

#include <iostream>
#include "stdio.h"
#include "time.h"
time :: time()
{
    hour = 12;
    minute = 0;
    second = 0;
}
//**********
void time::setTime(int h, int m, int s)
{
    hour = (h >= 0 && h < 12) ? h : 0;
    minute = (m >= 0 && m < 60) ? m : 0;
    second = (s >= 0 && s < 60) ? s : 0;
}
//**********
void time::dispTime()
{
    std::cout << ((hour == 0 || hour == 12) ? 12 : hour % 12)
              << " : " << (minute < 10 ? "0" : "") << minute
              << " : " << (second < 10 ? "0" : "") << second
              << (hour < 12 ? " AM" : " PM");
}

最后是主体主体:

#include <iostream>
#include "stdio.h"
#include "time.h"
using namespace std;
//**********
int main()
{
    time T;
    cout << "The initial standard time is: ";
    T.dispTime();
    T.setTime(13, 27, 36);
    cout << "\nStandard time after set-time is: ";
    T.dispTime();
    T.setTime(99,83,12); //attemp to have a invalid time
    cout << "\nStandard time is invalid and standard time is: ";
    T.dispTime();
    cin.get();
    cin.get();
}

当我用 g++ 编译它时:

4-5-class-time.cpp:在函数'int main()'中:

4-5-class-time.cpp:8: 错误: 预期 `;' 在'T'之前</p>

4-5-class-time.cpp:10:错误:未在此范围内声明“T”

在此先感谢您的帮助!

4

4 回答 4

4

看起来您的班级名称time是保留字,不能使用。如果您将其更改为mytime,就像我在这里所做的那样,您会发现它按预期工作。

我将不得不找出为什么 time是保留字或发生了什么。

显然,您的类名与全局::time结构冲突,这对于编译器不接受它的原因是有道理的。

如果你真的想使用一个time类,你应该创建自己的命名空间并将其放入其中。

namespace tony { class time {}; } int main() { tony::time t; }这应该消除名称冲突。

于 2013-02-20T09:39:50.803 回答
2

尝试将您的“类”文件从 time.h/time.cpp 重命名为 mytime.h/mytime.cpp

有一个名为 time.h 的系统包含文件,并且 - 根据为您的编译器配置的包含文件搜索顺序,系统文件可能会优先于您的文件包含在内。所以编译器根本看不到你的 Time 类。

于 2013-10-02T21:56:41.040 回答
1

您在第 22 行的 time.cpp 中有错字:

<< " : " << (seconde < 10 ? "0" : "") << second

应该 :

<< " : " << (second < 10 ? "0" : "") << second
于 2013-02-20T09:39:45.627 回答
1
#include <ctime>

namespace {
class time {};
}

int main()
{
    time();
}

给出错误:

main.cpp: In function 'int main()':
main.cpp:9:5: error: reference to 'time' is ambiguous
In file included from /usr/include/c++/4.7/ctime:44:0,
                 from main.cpp:1:
/usr/include/time.h:186:15: error: candidates are: time_t time(time_t*)
main.cpp:4:7: error:                 class {anonymous}::time

摆脱匿名命名空间消除了歧义。奇怪的:

main.cpp: In function 'int main()':
main.cpp:7:10: error: too few arguments to function 'time_t time(time_t*)'
In file included from /usr/include/c++/4.7/ctime:44:0,
                 from main.cpp:1:
/usr/include/time.h:186:15: note: declared here
于 2013-02-20T09:53:02.703 回答