很抱歉再次提问,
但我一直试图解决这个错误:
#include <iostream>
using namespace std;
class time{
private:
int m;
int h;
public:
time():m(0),h(0) {};
time(int x,int y): m(x),h(y) {}
int getm() const {return this->m;}
int geth() const {return this->h;}
void print() const;
time operator+(time aa);
time operator-(const time &a) const;
};
void time::print() const
{
cout <<"Hour: "<<h<<endl<<"Mins: "<<m<<endl;
}
time time::operator+( time &a)
{
time temp;
temp.m= this->m+a.getm();
temp.h=this->h+a.geth();
return temp;
}
int main ()
{
return 0;
}
我收到一条错误,指出时间没有命名类型,我不太确定错误,它应该有效。
也关于指针
给定我有一个指向指针的双指针,指针指向动态数据。
int *ptr=new int
int **p=&ptr;
delete p;
所以会删除p,先删除动态数据,然后指针ptr?
答案 0 :(得分:4)
问题是“时间”是C标准库中的一个函数,请参阅here。尝试将该类命名为其他内容。
答案 1 :(得分:1)
您需要更正方法声明或定义。
|----- Remove reference operator
V
time time::operator+( time &a)
{
time temp;
temp.m= this->m+a.getm();
temp.h=this->h+a.geth();
return temp;
}
答案 2 :(得分:1)
关于你的第二个问题
鉴于我有一个指向指针的双指针和指向动态数据的指针。
int *ptr=new int;
int **p=&ptr;
delete p;
delete p
一样,首先删除动态数据,然后删除指针ptr
?
没有!并且您不应该删除p
,因为它不是使用new
创建的。
规则非常简单,new
和delete
成对出现。如果您使用new
创建内容,则应使用delete
(只需一次)将其销毁。
在你的情况下,正确的方法是使用new创建的delete ptr
。作为一个有点混乱的选项,您可以使用delete *p
,p
指向ptr
。