c ++期望创建对象的错误;

时间:2014-07-31 14:40:06

标签: c++

在以下程序中,我收到这样的错误 Addtime.cpp:在函数'int main()'中: Addtime.cpp:41:6:错误:预期';'在'time1'之前 我彻底检查了程序,无法找到错误。请帮我。

#include <iostream>
#include<string>
using namespace std;

class time
{
    public:
        int hours;
        int minutes;
        int seconds;

    void showtime()
    {
       cout<<"time is "<<hours <<"hours:"<<minutes<<"minutes:"<<seconds<<"seconds \n";
    }

    time(int temph,int tempm,int temps)
    {
        hours=temph;
        minutes=tempm;
        seconds=temps;
    }
    time operator +(time t2)
    {
        int temph; 
        int tempm; 
        int temps;

        temph = hours + t2.hours;
        tempm = minutes + t2.seconds;
        temps = seconds + t2.minutes;

        tempm = (tempm + temps)/60;
        temps = temps % 60;
        temph = (temph + tempm)/60;

        tempm = tempm % 60;

        return time(temph,tempm,temps);
    }
};

int main()
{
    time time1 (12,15,15);
    cout<<"the first value is";
    time1.showtime();
    time time2(10,30,30);
    cout<<"the second value is";
    time2.showtime();

    time time3;
    time3 = time1 + time2;
    cout<<"the result is";
    time3.showtime();

    time time4;
    time4 = time1 + time2 + time3;
    time4.showtime();

    return 0;
}

3 个答案:

答案 0 :(得分:2)

实际上它无法在这些想要调用默认构造函数的行进行编译:

time time3;
....
time time4;

原因是如果您手动编写任何其他构造函数(在您的情况下:time(int,int,int)),编译器将不再为您生成默认构造函数。

要解决此问题,您需要进一步为time类添加默认构造函数。

答案 1 :(得分:2)

这是我在线编译器中的代码片段的链接,之后我稍微摆弄了它:

http://goo.gl/7WReTM

看起来time与C标准库中的time函数发生冲突。

因此,修复此问题的方法是将您的类重命名为其他内容(在我称之为timer的链接中),或者使用class time声明每个实例以消除符号歧义。

请注意,您的变量time3time4尝试使用默认构造函数,由于您添加了一个抑制默认值的3参数构造函数,因此它不存在,因此这两者都不会编译(我在我的例子中对它们进行了评论)。

答案 2 :(得分:0)

添加默认构造函数time(void){/ code /}; 如果你声明一个像time time;

这样的对象,你需要一个