在C ++中返回类类型

时间:2012-02-02 04:45:46

标签: c++ pointers

很抱歉再次提问,

但我一直试图解决这个错误:

#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?

3 个答案:

答案 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创建的。

规则非常简单,newdelete成对出现。如果您使用new创建内容,则应使用delete(只需一次)将其销毁。

在你的情况下,正确的方法是使用new创建的delete ptr。作为一个有点混乱的选项,您可以使用delete *pp指向ptr