新手求解:c++中的构造函数问题求解 5C

#include
using namespace std;
class Clock
{
public:
Clock()
/* {

}就是这个大括号,不加就会出错*/

void display();
void update();
void init();

private:

int hour,minute,second;

};
void Clock::init()
{
hour=minute=second=0;
}
void Clock::display()
{
cout<<hour<<"-"<<minute<<"-"<<second<<endl;
}
void Clock::update()
{
second++;
if(second==60)
{minute++;second=0;}
if(minute==60)
{hour++;minute=0;}
if(hour==24)
{hour=0;}
}
void main()
{
Clock c;
c.init();
c.update();
c.display();
system("pause");

}
public中的构造函数为什么编译出错,"public: __thiscall Clock::Clock(void)" (??0Clock@@QAE@XZ),该符号在函数 _main 中被引用。在构造函数后面加空的{}就可以通过?

12个回答

这个 { }是主方法体,没有肯定报错,好几年没看过C++了,希望能解答你的疑问

niconicopoi
greatgreatpizza 可是书上不加大括号也没问题啊TT
4 年多之前 回复

首先main的返回值为int
Clock这样写试试。

 class Clock
{
public:
    Clock();

    void display();
    void update();
    void init();

private:

    int hour,minute,second;

};
a1193561652
纵横车 回复niconicopoi: 哦,那是需要实现构造函数,加上Clock::Clock(){...}
4 年多之前 回复
niconicopoi
greatgreatpizza 有错啊TT
4 年多之前 回复
a1193561652
纵横车 回复niconicopoi: 就写成Clock();加分号,有没有错?
4 年多之前 回复
niconicopoi
greatgreatpizza 回复纵横车: 是啊,,我加了{}就不报错了了,不加就会报错
4 年多之前 回复
a1193561652
纵横车 回复niconicopoi: 你的是Clock(){}改成Clock();试试。
4 年多之前 回复
niconicopoi
greatgreatpizza 我是不是撸多了居然没看出来有什么区别...
4 年多之前 回复

因为你下面并没有定义这个构造函数,下面如果加
void Clock::Clock()
{
...;
}
就可以了

应该是加上
Clock::Clock()
{
...;
}
构造函数不带返回类型

在类定义中声明了构造函数,就需要去实现啊;除非你不去生命,采取缺省的构造函数。

nswcfd
nswcfd 笔误,是不去声明。
4 年多之前 回复

Clock() -- 这句末尾忘加 ; 而已

对于构造函数,写完了要注意加;
比如上面那个Clock();//一般为Clock(形参类表);
还有写出来了构造函数就不存在默认构造函数,楼主只是“;”那是函数的声明,既然是自定义构造函数就要自己实现构造函数。
想楼主那样直接加{}是不需要分号的,那样是直接进行函数的实现,具体实现可以写在括号内。
新手报到,请多指教。

要么声明函数,,要么定义函数。。。也就是要么分号。。要么大括号

或者使用该函数时,包含time.h文件

书上的知识大部分都是人写的然后打印出来出书,或者是编辑部代写你挂个名字。书上看理论就好,实操还得自己摸索。

关于构造函数这块,多看看定义

共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问